Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/457.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 有没有一种方法可以使用规则来监视一组不在范围内但在服务中的变量?_Javascript_Angularjs_Watch - Fatal编程技术网

Javascript 有没有一种方法可以使用规则来监视一组不在范围内但在服务中的变量?

Javascript 有没有一种方法可以使用规则来监视一组不在范围内但在服务中的变量?,javascript,angularjs,watch,Javascript,Angularjs,Watch,例如,给定以下来自服务的数据 myService.var1 myService.var2 myService.var3 通常,您需要执行以下操作 $scope.$watch(function(){ return myService.var1 }, function(newValue, oldValue) { }) $scope.$watch(function(){ return myService.var2 }, functio

例如,给定以下来自服务的数据

myService.var1
myService.var2
myService.var3
通常,您需要执行以下操作

    $scope.$watch(function(){
      return myService.var1
    }, function(newValue, oldValue) {
    })

    $scope.$watch(function(){
      return myService.var2
    }, function(newValue, oldValue) {
    })
但是我想一次看变量列表

我尝试了以下方法,但每个方法都有自己的问题

    // Max digest cycle iteration error
    $scope.$watch(function(){
      return {
                 var1: myService.var1,
                 var2: myService.var2  
             }
    }, function(newValue, oldValue) {

    })

有人能给我指个方向吗?

为max digest修好。
这是因为我们在每次摘要迭代中都创建对象的新实例。
让我们修复它:

var watched = {
  var1: myService.var1,
  var2: myService.var2  
};
$scope.$watch(function(){
  return watched;
  // return angular.toJson(watched); // serialized can be better
}, function(newValue, oldValue) {
});

您的
$watchGroup
将无法工作,因为您正在监视变量的副本,而不是原始副本

通过下面的修复,我们得到了以前的解决方案(几乎):


为什么需要观察服务中的变量?做一个手表通常是不好的做法,我想问你为什么要这么做…
Max digest
是因为你的手表每次都会返回新的对象。
var watched = {
  var1: myService.var1,
  var2: myService.var2  
};
$scope.$watch(function(){
  return watched;
  // return angular.toJson(watched); // serialized can be better
}, function(newValue, oldValue) {
});
$scope.vars = {var1: myService.var1, var2: myService.var2};
$scope.$watchGroup(['vars'], function(newValue, oldValue) {
});