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