有没有一种方法可以使用anagular来监视不在作用域中而是在服务中的一组变量?

Is there a way to watch a group of variables not in scope but in service using anagular?

本文关键字:服务 一组 变量 作用域 监视 方法 一种 可以使 有没有 anagular      更新时间:2023-09-26

例如,给定以下来自服务

的数据
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) {
    })

    $scope.myVar1 = myService.var1
    $scope.myVar2 = myService.var2
    // this doesn't actually watch the service variable
    $scope.$watchGroup(['myVar1', 'myVar2'], 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将不工作,因为你正在监视变量的副本,而不是原始的。

在接下来的修复中,我们几乎回到了之前的解决方案:

$scope.vars = {var1: myService.var1, var2: myService.var2};
$scope.$watchGroup(['vars'], function(newValue, oldValue) {
});