2016-03-02 51 views
3

我在我的角度模塊中編寫了幾個不同的自定義過濾器以實現我想要的排序,例如,在按鈕上切換角度過濾器單擊

角:

var sortByValue = function() { 
    return function(input) { 
     /*...*/ 
     return some_boolean; 
    } 
}; 

var sortByCount = function() { 
    return function(input) { 
     /*...*/ 
     return some_boolean; 
    } 
}; 

在我HTML(玉),我可以調用不同的過濾器是這樣的:

.row(ng-repeat='item in array | sortByValue') 

OR

.row(ng-repeat='item in array | sortByOrder') 

我現在希望添加一個在兩個不同的排序選項之間切換的按鈕。


我試圖通過定義一個新的全面過濾功能,可利用一個$scope變量跟蹤切換(見下文),要做到這一點,但它不工作。

角:

var myController = function($scope) { 
    // function called on ng-init 
    $scope.initialize = function() { 
     $scope.byValue = true; 
    } 
}; 

var sortFunction = function() { 
    if($scope.byValue) { 
     return sortByValue(); 
    } else { 
     return sortByCount(); 
    } 
} 

我還試圖使在$scope變量到過濾器在HTML本身,例如sortFunction:byValue但它也不起作用。

任何人都可以幫忙嗎?謝謝!


演示plunker @plnkr.co/edit/altzOow7aIQhqKTN93Oe?p=preview?

回答

1

可以使用一個自定義濾鏡功能和一個參數

app.filter('mySorter', function(){ 
    return function(items, sortType){ 
     // sort logic 
     if(!items) return; 
     return items.sort(function(a, b){ 
      if(sortType=== 'order'){ 
       // order matching 
      }else{ 
       // value matching 
      } 
     }); 
    } 

}); 

HTML

.row(ng-repeat='item in array | mySorter: sortType') 

<button ng-click="toggleSort('order')"> 
在可變 sortType

012圍繞控制開關

然後

$scope.sortType = 'order' // or 'value' 

$scope.toggleSort = function(type){ 
    $scope.sortType = type; 
} 
+0

你有瘋狂的代表,@charlietfl。謝謝!會看看! – Tacocat

+0

由於一些未知的原因,我無法理解,這對我來說也不適用::( – Tacocat

+0

在[plunker]中創建一個簡單的演示(http://plnkr.co/edit/?p=catalogue) – charlietfl