另一个数组

时间:2017-03-23 11:42:37

标签: javascript angularjs angular-filters

我刚刚开始在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>

有什么建议吗?

1 个答案:

答案 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"

&#13;
&#13;
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;
&#13;
&#13;