控制器在 Angular 中做这样的事情是否合法?
$rootScope.someArbitaryObject = ["fee", "fie", "fo", "fum];
或者
$rootScope.foo = {name: "Jane Q. Public", favoriteColor: "green"}
关于您评论中的问题,分享日期的好方法是通过 localstorage(或 sessionStorage)。我写了一个 storageService,它允许你保存、加载和删除。
angular.module(yourApplication).service('storageService', [
function() {
// implementation using localStorage. Future possibility to user $cookie service here, or sessionStorage, depends on what you want
return {
save: function(key, jsonData, expirationMin){ // default is 30 minute expiration
if(!expirationMin)
expirationMin = 30;
var expirationMS = expirationMin * 60 * 1000;
var record = {
value: JSON.stringify(jsonData),
timestamp: new Date().getTime() + expirationMS
};
localStorage.setItem(key, JSON.stringify(record));
return jsonData;
},
load: function(key){
var record = JSON.parse(localStorage.getItem(key));
if (!record){
return false;
}
return (new Date().getTime() < record.timestamp && JSON.parse(record.value));
},
remove: function(key){
localStorage.removeItem(key);
}
};
}
]);
使用服务的另一种方式(稍微修改了 Yoni 的代码):
var myApp = angular.module('myApp', []);
myApp.service('MyService', function () {
var someData = 'test';
return {
getData: function(){ return someData},
setData: function(input){ someData = input;}
};
});
myApp.controller('FirstCtrl', function($scope, MyService) {
$scope.data = MyService.getData();
});
myApp.controller('SecondCtrl', function($scope, MyService) {
$scope.data = MyService.getData;
});
是的,这是合法的,但前提是您希望所有控制器都可以访问该模型。
更好的做法是使用可以注入到一个或多个控制器的服务:
var myApp = angular.module('myApp', []);
myApp.factory('MyService', function () {
return { message: "I'm data from a service" };
});
myApp.controller('FirstCtrl', function($scope, MyService) {
$scope.data = MyService;
});
myApp.controller('SecondCtrl', function($scope, MyService) {
$scope.data = MyService;
});
您对一个控制器中的 MyService 属性所做的任何更改都会影响使用 MyService 的所有其他控制器。