我有一个抽象状态,其控制器从$ 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吗?
答案 0 :(得分:1)
不,您不需要做任何这些事情,您只需要确保您的数据得到适当更新,并且您的观察者已正确设置。对你的孩子说你应该做类似的事情。
scope.$watch(function(){return $rootScope.data},function(){
})
这将让您的控制器知道何时重新分配数据阵列。您还可以使用手表集合,它取决于您计划对阵列进行哪种类型的修改。分配它将破坏数组并使用新地址创建一个新数组,但添加和删除它以不同方式影响它的元素。但在这种情况下你需要观察者,因为你正在重新创建数组。
另外一点是,我真的不建议使用rootScope来实现这个目的。为此使用服务似乎有点过分,但大多数时候你也需要实现一些数据操作逻辑。如果你做得对,你最终会创建一项服务
答案 1 :(得分:0)
正确的方法几乎总是为控制器之间的共享数据创建服务或 factory 。