一个页面分为几个部分,每个部分都有自己的控制器。这些部分上的JSON对象是相关的。在一个部分中执行某些操作后,将更改JSON对象的状态。更改应传播到页面的其他部分。一个控制器可以在另一个控制器中访问一个对象,比如$ scope.foo。在前一个控制器的动作之后,我有$ scope.foo = ...但是,代码不会同步另一部分中显示的数据。
另外,我有另一组JSON对象,在控制器中无法访问。控制器中的一个对象就是其中一个对象。如何同步它们? AngularJS观察者是解决这个问题的好方法吗?
根据Lux的建议,我创建了一项服务如下:
angular.module('myApp.services')
.service('FooService', ['NotificationCenter', function (NotificationCenter) {
"use strict";
var foo;
function setFoo(f) {
foo = f;
}
function getFoo() {
return foo;
}
var facade = {
getFoo: getFoo,
setFoo: setFoo
};
return facade;
}]);
在显示foo数据的控制器中,我有
// A GET web service call
FooService.setFoo(response);
$scope.currentFoo = FooService.getFoo();
在另一个数据被更改的控制器中,我有
// after changing the data and make a PUT web service call which will retrieve the updated data
FooService.setFoo(response);
第一个控制器的数据未更新。
答案 0 :(得分:2)
如果您需要跨$rootScope
,controllers
或directives
使用Service分享数据,请不要使用services
。在Angular中,services
是单例,意味着可以跨组件共享相同的实例,这反过来意味着,如果您myService.setMyData('foo')
在一个位置,您可以通过myService.getMyData()
正确访问更新的数据在另一个组成部分。