Angular ng-options访问可迭代

时间:2015-02-25 21:23:48

标签: angularjs

我是角色的新手并拥有以下代码:

<select ng-model="f.value" ng-options="item.value as item.label for item in f.options | filter: myProcessFilter" />

我可以使用类似的东西轻松过滤选项

        $scope.myProcessFilter = function (v, i) {
            console.log(v);
            // do some filtering and return
        }

但是,现在我想将一个变量传递给processFilter。像这样

<select ng-model="f.value" ng-options="item.value as item.label for item in f.options | filter: myProcessFilter('some value')" />

但是当我这样做时,(v,i)不再自动通过。所以我想手动传递它。但是,我不知道如何从ng-options指令中访问iterable。我试过了:

<select ng-model="f.value" ng-options="item.value as item.label for item in f.options | filter: myProcessFilter(item)" />

<select ng-model="f.value" ng-options="item.value as item.label for item in f.options | filter: myProcessFilter(this)" />

但是都不行。我在谷歌搜索正确的东西时遇到了麻烦,我确信这很简单!任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

请注意,在代码的第一个版本中,您使用的是… | filter: myProcessFilter,没有括号。您传递给filter filter的是一个函数,不是此函数返回的内容

应始终如此:filter filter 需要一个功能。如果由于某些原因,它还需要一个额外的变量来工作,你应该使用一个中间函数来完成这项工作:

<select ng-model="f.value" ng-options="… | filter: createMyProcessFilter('Some value')" />
function createMyProcessFilter(additionalValue)
{
    return function myProcessFilter(v, i) {
        // You can now use v, i AND additionalValue here!
    };
}