Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/410.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 观察AngularJS服务中的数组更改_Javascript_Angularjs - Fatal编程技术网

Javascript 观察AngularJS服务中的数组更改

Javascript 观察AngularJS服务中的数组更改,javascript,angularjs,Javascript,Angularjs,我有一个服务对象,它公开了一个数组,我希望监视该数组(在服务中)的更改,然后调用一个方法 在控制器中,通过观察对其$scope上的数组的更改,这是微不足道的,但是如何在服务中实现同样的更改呢? 该服务在多个控制器中共享,我不想在许多地方实现该逻辑 我试过使用Polymer的ArrayObserver,但它似乎不适用于Angular 有人有什么建议吗? 谢谢您可以在$rootScope上添加手表,即: .service("mySvc", function($rootScope,...) {

我有一个服务对象,它公开了一个数组,我希望监视该数组(在服务中)的更改,然后调用一个方法

在控制器中,通过观察对其$scope上的数组的更改,这是微不足道的,但是如何在服务中实现同样的更改呢? 该服务在多个控制器中共享,我不想在许多地方实现该逻辑

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

有人有什么建议吗?
谢谢

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

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

但是,当不再需要手表时,您必须格外小心才能将其注销。

您好,您可以使用
$watchCollection
查看阵列更改

var arrayChangeListner = $rootScope.$watchCollection(function(){
});
如@Nikos所述,如果不再需要手表,请注销该手表

$watch返回一个取消注册函数,以像这样取消注册调用该函数

arrayChangeListner();
供参考:


  • 希望它有帮助

    我希望找到一种不使用rootScope的方法,这些是暂时的模型,我不希望引用rootScope。手动销毁可能是一种选择,但在本用例中很难实现