AngularJS - $ rootScope与其他控制器共享数据

时间:2014-05-27 12:20:48

标签: angularjs

我有一个抽象状态,其控制器从$ resource async获取数据。并将结果放在$ rootScope.data中。

.state('stateA', {
    abstract: true, 
    url...
    templateUrl...
    controller: function($rootScope, Resource){
        // Empty data so far
        $rootScope.data = [];

        Resource.query().$promise.then(function(data){
            $rootScope.data = data;
        })
    }
})

继承状态应该使用该数据。在解决来自这些状态的控制器时,$ rootScope尚未收到数据。

在抽象状态控制器中解析Resource.query()时,它会更新$ rootScope。

附加到$ rootScope async的数据不是$ digest?为什么在填充$ rootScope.data之后,从抽象状态继承的控制器看不到更改?我需要$ broadcast和$ on吗?

2 个答案:

答案 0 :(得分:1)

不,您不需要做任何这些事情,您只需要确保您的数据得到适当更新,并且您的观察者已正确设置。对你的孩子说你应该做类似的事情。

 scope.$watch(function(){return $rootScope.data},function(){

 })

这将让您的控制器知道何时重新分配数据阵列。您还可以使用手表集合,它取决于您计划对阵列进行哪种类型的修改。分配它将破坏数组并使用新地址创建一个新数组,但添加和删除它以不同方式影响它的元素。但在这种情况下你需要观察者,因为你正在重新创建数组。

另外一点是,我真的不建议使用rootScope来实现这个目的。为此使用服务似乎有点过分,但大多数时候你也需要实现一些数据操作逻辑。如果你做得对,你最终会创建一项服务

答案 1 :(得分:0)

正确的方法几乎总是为控制器之间的共享数据创建服务 factory