Angular $ watchGroup和已删除的变量

时间:2015-02-02 05:56:33

标签: javascript angularjs

我有以下代码:

listener=$rootScope.$watchGroup(['user','geolocation'],function(newvalue,oldvalue) {
  if (angular.isDefined(newvalue[0]) && angular.isDefined(newvalue[1]) {
    ... Do Something...
  }
}

我基本上等待两个承诺完成,加载$ rootScope.user和$ rootScope.geolocation。完成这些后,我想做点什么。

问题是,可以看到$ rootScope.user更改,但从未见过$ rootScope.geolocation更改。

我现在认为它可能与$ rootScope.geolocation的处理方式有关。如果$ rootScope.geolocation是一个对象。如果我替换$ rootScope.geolocation,并且它与一个新对象相关联,那么手表会发生什么?

手表是否会失去与其应该观看的内容的联系?

我注意到,如果我执行<div ng-bind="$root.geolocation"></div>,它会在重置时消失,并且不会重新出现。

我怎样才能避免这种情况,以便我的绑定/监视真正起作用?

2 个答案:

答案 0 :(得分:0)

我建议您在使用$rootScope完成承诺后在$broadcast上触发事件:

$rootScope.$broadcast('myEvent');

然后,只需听myEvent并做你的事情:

$rootScope.$on('myEvent', function(newvalue, oldvalue) {
    // do your stuff
}

docs中的更多信息。

答案 1 :(得分:0)

也许你可以使用$q.all将一组promises作为参数,并在返回的内容上调用then。文档为here