$ Watch in a service?

Kub*_*lik 60 angularjs angularjs-service

是否可以在服务中设置一个$watch对象数组(我希望$watch声明本身在服务中)?

pko*_*rce 121

您可以通过$rootScope向该$watch方法注入和使用函数第一个参数来向该组监视添加任何表达式.伪代码:

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

不要忘记方法的第三个布尔参数$watch.您需要指定true是否要深度监视整个对象以进行更改.

  • @ btm1我认为你的评论不准确.这里看到的是第一个函数调用的_result_.没有什么比"在整个应用程序中观看rootScope",这里没有这样的概念. (3认同)
  • 我已经创建了一个jsfiddle示例来演示它是如何工作的:http://jsfiddle.net/gvJdn/158/ (3认同)
  • 这真的是最好的选择吗?我认为这鼓励在任何地方添加"添加rootScope",我(当我是初学者时有罪)注入rootScope,就像我添加了半冒号一样.这很难:D (2认同)

btm*_*tm1 15

服务本质上就像是班级和家庭方法.您可以设置一个方法,您可以从控制器调用该方法,该方法的参数是范围并应用监视表达式:

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();
}
Run Code Online (Sandbox Code Playgroud)

更新:如果您尝试在服务中查看私有局部变量,请使用$ rootScope查看接受的答案.如果你试图在本地范围内观察一个$ scope变量而不是上面的最佳选择.他们正在实现两件截然不同的事情.