2014-09-20 52 views
1

我在控制器中有很多過濾器。如果其中一個變化,我想調用一個函數。

$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 */ } 
}); 

所以我的問題是這樣的:什麼是最優雅的方式來找到從過濾器改變的回調函數裏面出來?

預先感謝您。

+0

不會是更容易分開看每一個過濾器而不是看所有過濾器一起(在一個陣列)和然後嘗試區分哪一個改變了? – 2014-09-20 17:09:39

+0

我也考慮過這個選項。如果沒有任何明顯/優雅的解決方案,這是我最終會做的。謝謝。 – tsikov 2014-09-20 19:00:36

回答

0

,如果你不想寫多個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](); 
    } 
});