Angularjs 检查使用$watchCollection时更改了哪个作用域值

Angularjs 检查使用$watchCollection时更改了哪个作用域值,angularjs,angularjs-scope,Angularjs,Angularjs Scope,我的控制器中有许多过滤器。如果其中一个发生了变化,我想调用一个函数 $scope.$watchCollection("[order, currentFilter, currentPage]", function(newValue, oldValue, scope) { if(newValue === oldValue) return; $scope.queryModel(); }); 但是,我想通过在回调中添加特定于过滤器的逻辑,使回调更复杂一些,如下所示: $scope.$watch

我的控制器中有许多过滤器。如果其中一个发生了变化,我想调用一个函数

$scope.$watchCollection("[order, currentFilter, currentPage]", function(newValue, oldValue, scope) {
  if(newValue === oldValue) return;
  $scope.queryModel();
});
但是,我想通过在回调中添加特定于过滤器的逻辑,使回调更复杂一些,如下所示:

$scope.$watchCollection("[order, currentFilter, currentPage]", function(newValue, oldValue, scope) {
  if(newValue === oldValue) return;
  $scope.queryModel();
  if(/* order changed */) { /* do stuff */ }
});
所以我的问题是:从回调函数内部找出哪个过滤器发生了变化的最优雅的方法是什么?


提前感谢。

如果您不想编写多个if语句,可以执行以下操作:

$scope.$watchCollection("[order, currentFilter, currentPage]", function(newValue, oldValue, scope) {
  if(newValue === oldValue) return;

  var functionMap = {
     order : function () { // do staff for the order filter },
     currentFilter: function () { },
     currentPage : function () { }
  };

  if (newValue)
  {
     functionMap[newValue.filterName]();
  }
});

单独观察每个过滤器,而不是一起观察所有过滤器(在一个数组中),然后尝试区分哪个过滤器发生了变化,这不是更容易吗?我也考虑过这个选项。如果没有任何明显/优雅的解决方案,我最终会这么做。谢谢