$看服务内?

是否有可能build立一个服务内的对象数组$watch (我希望$watch声明本身在服务内)?

您可以通过注入$rootScope并使用函数第一个参数到$watch方法来将任何expression式添加到该组表。 伪代码:

 $rootScope.$watch(function() { return //value to be watched; }, function watchCallback(newValue, oldValue) { //react on value change here }); 

不要忘记$watch方法的第三个布尔参数。 如果要深入观察整个对象以进行更改,则需要指定true

服务本身就像class级和房子的方法。 你可以设置一个你从你的控制器调用的方法,它的参数是范围,并应用一个监视expression式:

 app.service('myservice',function(){ this.listen = function($scope) { $scope.$watch(function(){return someScopeValue},function(){ //$scope.dosomestuff(); }); } }); //your controller function myCtrl($scope,myservice) { $scope.listen = function() { myservice.listen($scope); } //call your method $scope.listen(); } 

更新:如果您正在尝试查看服务内部的私有局部variables,请使用$ rootScope查看接受的答案。 如果你想在本地范围内观察一个$ scopevariables,那么这是最好的select。 他们正在实现两个完全不同的东西。

你能澄清你想达到什么吗? 据我所知,你正在从服务器获取一系列对象作为你的模型。 那么现在还不清楚:

  1. 你想validation数组中的某些对象是否已经改变(也许自从最后一次调用服务器以防复发池)?
  2. 你是否想要validation用户是否已经通过一些前端控制元素更改了数组中的某些对象?

在情况1中,您并不需要使用$ watch(或者更确切地说$ watchCollection),但是您应该遍历从服务器接收到的数组,并validation所做的更改(与$ watchColleciton相同)。 如果对象与您当前拥有的对象不同,则在此元素上调用object。$ save()。

在情况2中,将$ scope作为parameter passing给服务函数,或者使用$ rootScope(如果将数组放在$ rootScope中),请使用$ watchCollection()。

如果您能澄清这些情况,我可以为您提供真实的代码。