0

說我有像這樣定義的(極度簡化)控制器上定義的函數:傳遞參數來篩選控制器

app.controller('myController', ['$scope', function(scope){ 
    list=[1,2,3,4,5] 
    scope.filterFunction = function(item, upperBound){ 
     if(item < upperBound){ 
     return(item); 
     } 
    } 
}]); 

我怎麼可能通過模板傳爲UPPERBOUND值?

<div ng-repeat="item in list | filter:filterFunction">{{item}}</div> 

我知道,如果你滾專用的過濾器,你可以用filterName:arg1:arg2....

參數有沒有辦法實現這種方法一個類似的行爲?或者,有沒有辦法讓控制器功能可以訪問範圍?

回答

0

如果不創建一個專用的過濾器,你可以創建範圍,返回經過濾項的功能。如:

app.controller('myController', ['$scope', function(scope) { 
    scope.list = [1,2,3,4,5]; 
    scope.upperBound = 3; 

    scope.filterFunction = function(list, upperBound) { 
     var rval = []; 
     for(var i = 0, l = list.length; i < l; i++) 
     { 
      if(list[i] < upperBound) 
      { 
       rval.push(list[i]) 
      } 
     } 
     return rval; 
    }; 

    // or 
    scope.filteredList = function() { 
     var rval = []; 
     for(var i = 0, l = scope.list.length; i < l; i++) 
     { 
      if(scope.list[i] < scope.upperBound) 
      { 
       rval.push(scope.list[i]) 
      } 
     } 
     return rval; 
    }; 

}]); 

,然後綁定到該函數:

<ul> 
    <li ng-repeat="item in filterFunction(list,upperBound)"> 
    {{item}} 
    </li> 
</ul> 

<ul> 
    <li ng-repeat="item in filteredList()"> 
    {{item}} 
    </li> 
</ul> 

Plunker