主文件(index.php)有一些会话信息,比如我想在部分(视图)中使用的用户名。这些是静态 html 文件,我更喜欢让它们保持静态。
我可以从部分的控制器调用服务器以获取数据。但是当主页加载时我有信息,并且在加载部分后它们不会改变。
如何将这些信息放在主 html 上,然后在加载时传递给部分控制器?
PS:我正在使用AngularJS 1.1.5(最近开始学习AngularJS)
更新:我在主页设置值上尝试了带有控制器的服务,并尝试读取部分控制器。我无法让它工作。
主文件(index.php)有一些会话信息,比如我想在部分(视图)中使用的用户名。这些是静态 html 文件,我更喜欢让它们保持静态。
我可以从部分的控制器调用服务器以获取数据。但是当主页加载时我有信息,并且在加载部分后它们不会改变。
如何将这些信息放在主 html 上,然后在加载时传递给部分控制器?
PS:我正在使用AngularJS 1.1.5(最近开始学习AngularJS)
更新:我在主页设置值上尝试了带有控制器的服务,并尝试读取部分控制器。我无法让它工作。
内联 php 的日子已经一去不复返了——包括会话数据。
您想要做的是创建一个服务对象,它为“所有”数据调用您的“服务器端应用程序”,如果您愿意,您甚至可以将会话绑定到 JSON 对象。
此服务对象需要由其他部分共享,这些部分很可能有自己的控制器。为此,您需要能够在服务对象上的控制器之间共享数据。
这是我要做的:
在您的 index.php/html/whatever 中包含一个带有 Angular 服务的脚本标记,该服务捕获并返回您的数据。
<html>
<head>
<!-- Include Angular -->
<script type="text/javascript">
// By creating this service, we can capture the data from
// from the server and store it.
angular.module('myApp').factory('usrData', [function () {
var data = {};
data.usrData = <?php echo $usrService->getUserData(); ?>;
return data;
}]);
</script>
</head>
<body>
<!-- Continue with HTML -->
然后,您可以拥有另一个服务,例如在 service.js 中,您可以使用它来收集您从服务器捕获的内联数据以及您通过 AJAX 查询的其他数据,并创建一个 API 来管理它。您可以通过将 HTML 中的内联服务作为依赖项注入此dataServices
模块来执行此操作:
angular.module('myApp').factory('dataServices', [
'$http', 'otherData', 'usrData', // <-- These are the module dependencies
function ($http, otherData, usrData) { // <-- Here you use them as parameters
'use strict';
var dataModel = {
otherData: otherData,
usrData: usrData
};
return { // Data service API
query: function (dataType) {
// returns data
// API continues …
最后,在你的控制器中,比如 controller.js,你注入这个dataServices
服务作为一个依赖,通过这个 API 来检索和保存你的数据:
angular.module('myApp').controller('UsrWidget', [
'$scope', 'dataServices',
function ctrlrPtHeader($scope, dataServices) {
"use strict";
$scope.usrData = dataServices.query('usrData');
// And now you have the data.
现在,控制器可以直接访问内联到 HTML 中的 usrData 服务,但我更喜欢全局 API 来管理我的数据,方法是提供一个漂亮的 API 脚本并保持我的 HTML 尽可能干净。整个事情的秘诀是将所有数据封装在 Angular 的环境中,并通过依赖注入和工厂方法传递信息。