我有一个我要过滤的选择元素:
<select multiple="multiple" class="span2" data-ng-model="selectedParameters">
<option data-ng-repeat="parameter in availableParameters">
{{parameter}}
</option>
</select>
“availableParameters”是一个字符串数组,我可以从这里毫无问题地到达,“selectedParameters”是另一个表示UI中所选元素的字符串数组。
availableParameters = ["AAA", "BBB", "CCC", "DDD"];
我在对象图下面有另一个字符串数组(可在HTML中访问)
graph.parameters = ["AAA", "BBB"];
我试图通过“graph.parameters”过滤“availableParameters”并获得如下列表:“CCC”,“DDD”
我查看了AngularJS的文档,但看不到我的问题的示例。
我能做的就是这样:
<option data-ng-repeat="parameter in availableParameters | filter: !graph.parameters ">{{parameter}}</option>
答案 0 :(得分:2)
您可以制作自定义过滤条件,以过滤掉graph.parameters
以外的所有项目:
angular.module('yourModuleNameHere').filter('params', [function(){
return function (items, filterBy) {
return items.filter(function(currentItem){
return filterBy.indexOf(currentItem) === -1;
});
};
}]);
之后您可以将其用作:
<select multiple="multiple" class="span2" data-ng-model="selectedParameters">
<option data-ng-repeat="parameter in availableParameters | params:graph.parameters">
{{parameter}}
</option>
</select>
答案 1 :(得分:1)
你可以通过多种方式实现这一点,当数据发生变化时,过滤器很有用,但我认为这不是你的情况,你只需要在你的控制器中添加一个简单的商业登录...看看以下是:
var rawlist = ['foo', 'baz', 'bar'];
var blacklist = ['baz'];
var list = rawlist.filter(function(item) {
return blacklist.indexOf(item) < 0;
});
console.log('available parameters are', list);
&#13;
所以,您的观点可以是:
<select ng-model="someScopeProperty" ng-options="item for item in list track by $index"></select>
&#13;