我刚刚开始在AngularJS中使用过滤器。我想要做的是使用一个简单的选择框将作品链接到产品。
在我的$ scope中,我有一个对象“product”,其中包含一个数组“technicalProducts”。此数组包含已链接到我当前产品的所有合成。数组“allCompositions”包含所有现有组合。 不,每当链接一个合成时,我想从Select-options中删除它。我认为最简单的方法是使用过滤器。
不幸的是,这不起作用:
<select class="form-control" name="compositions" id="compositions" ng-options="composition as composition.sysName for composition in allCompositions track by composition.sysName | filter:product.technicalProducts" ng-model="selComposition"></select>
有什么建议吗?
答案 0 :(得分:1)
过滤器适用于您的场景。但您必须定义自定义过滤器,因为默认过滤器仅适用于简单字符串。
// input for the target collection, args for the filter condition.
angularModule.filter('testFilter', function(input, args) {
if (!args || args = '') return input;
return input.filter(function(item) {
return args.indexOf(item) === -1;
});
})
然后以这种方式使用它:
ng-options="composition as composition.sysName for composition in allCompositions | testFilter: product.technicalProducts track by composition.sysName"
var app = angular.module("app", []);
app.filter('testFilter', function() {
return function(input, args) {
if (!args || args === '') return input;
return input.filter(function(item) {
return args.indexOf(item) === -1;
});
};
});
app.controller("myCtrl", function($scope) {
$scope.selectedItem = 2;
$scope.testArr = [
1, 2, 3, 4, 5, 6, 7, 8
];
$scope.testArr2 = [
1, 3, 5, 7
];
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.4/angular.min.js"></script>
<div ng-app="app" ng-controller="myCtrl">
<select ng-options="item for item in testArr | testFilter: testArr2" ng-model="selectedItem"></select>
</div>
&#13;