将参数传递给控制器​​上定义的过滤函数

时间:2014-04-22 00:23:51

标签: javascript angularjs angularjs-controller angularjs-filter

说我有一个(非常简化的)控制器定义如下:

 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....

进行参数化

有没有办法用这种方法实现类似的行为?或者,有没有办法让控制器功能可以访问范围?

1 个答案:

答案 0 :(得分: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