使用各种AngularJS控制器在同一页面上同步JSON对象

时间:2016-02-05 20:10:43

标签: angularjs

一个页面分为几个部分,每个部分都有自己的控制器。这些部分上的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);

第一个控制器的数据未更新。

1 个答案:

答案 0 :(得分:2)

如果您需要跨$rootScopecontrollersdirectives使用Service分享数据,请不要使用services。在Angular中,services是单例,意味着可以跨组件共享相同的实例,这反过来意味着,如果您myService.setMyData('foo')在一个位置,您可以通过myService.getMyData()正确访问更新的数据在另一个组成部分。

https://plnkr.co/edit/o1jUauTLQNLKx3dk6vrZ?p=preview