观察AngularJS服务中的数组更改

时间:2014-06-19 08:53:06

标签: javascript angularjs

我有一个服务对象,它公开了一个我想要观察变化的数组(在服务中),然后调用一个方法。

通过观察对其范围内的数组的更改,在控制器内部这是微不足道的,但如何在服务中完成相同的操作呢? 该服务在多个控制器中共享,我不想在很多地方实现逻辑。

我尝试过使用Polymer的ArrayObserver,但它似乎不适用于Angular。

有没有人有任何建议? 感谢

2 个答案:

答案 0 :(得分:0)

您可以在$rootScope上添加手表,即:

.service("mySvc", function($rootScope,...) {
    var myArray = ...
    ...
    $rootScope.$watchCollection(
        function() {
            return myArray;
        },
        function(newval) {
            ...
        }
    );

但是,当(如果)不再需要时,您必须格外小心取消注册。

答案 1 :(得分:0)

您好您可以使用$watchCollection来观看数组更改

var arrayChangeListner = $rootScope.$watchCollection(function(){
});

如果不再需要,请取消注册手表,如@Nikos所述

$ watch返回注销功能,取消注册该函数的调用

arrayChangeListner();

供参考:

  1. Angular DOcs
  2. http://www.bennadel.com/blog/2566-scope-watch-vs-watchcollection-in-angularjs.htm
  3. 希望有所帮助