Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AngularJS筛选器隐藏项(如果它存在于另一个数组中)_Javascript_Angularjs_Data Binding_Angularjs Ng Repeat_Angularjs Filter - Fatal编程技术网

Javascript AngularJS筛选器隐藏项(如果它存在于另一个数组中)

Javascript AngularJS筛选器隐藏项(如果它存在于另一个数组中),javascript,angularjs,data-binding,angularjs-ng-repeat,angularjs-filter,Javascript,Angularjs,Data Binding,Angularjs Ng Repeat,Angularjs Filter,我有两个阵列: $scope.arr1 = [1, 2, 3]; $scope.arr2 = [2, 3, 4]; 我正试图: ng重复通过arr1 使用自定义筛选器仅显示arr1中不在arr2 输出应为1 以下是我的看法: <ul> <li ng-repeat="item in arr1 | matcher"> {{item}} </li> </ul> {{item}} 这是我的控制器: var app = an

我有两个阵列:

$scope.arr1 = [1, 2, 3];
$scope.arr2 = [2, 3, 4];
我正试图:

  • ng重复通过
    arr1
  • 使用自定义筛选器仅显示
    arr1
    中不在
    arr2
  • 输出应为
    1
以下是我的看法:

<ul>
  <li ng-repeat="item in arr1 | matcher">
    {{item}}
  </li>
</ul>
  • {{item}}
这是我的控制器:

var app = angular.module('plunker', []);

app.filter('matcher', function () {
  for (var i = 0; i < $scope.arr1.length; i++) {
    for (var j = 0; j < $scope.arr2.length; j++) {
      if ($scope.arr1[i] != $scope.arr2[j])  {
        return $scope.arr1[i];
      }
    }
  }
});

app.controller('MainCtrl', function($scope) {
  $scope.arr1 = [1, 2, 3];
  $scope.arr2 = [2, 3, 4];
});
var-app=angular.module('plunker',[]);
app.filter('matcher',函数(){
对于(变量i=0;i<$scope.arr1.length;i++){
对于(变量j=0;j<$scope.arr2.length;j++){
if($scope.arr1[i]!=$scope.arr2[j]){
返回$scope.arr1[i];
}
}
}
});
应用程序控制器('MainCtrl',函数($scope){
$scope.arr1=[1,2,3];
$scope.arr2=[2,3,4];
});
这是我的扑克牌:


你知道如何让这个自定义过滤器工作吗?

你永远不会以任何方式访问角度过滤器内部的
$scope
,你应该在过滤器内部将它们作为参数传递,然后在过滤器功能内部访问它们。为了使它更干净,您可以在过滤器内部使用
.filter
&
.indexOf

HTML

<body ng-controller="MainCtrl">
    <ul>
      <li ng-repeat="item in arr1 | matcher: arr2">
        {{item}}
      </li>
    </ul>
</body>

您将永远无法以任何方式访问角度过滤器内部的
$scope
,您应该将它们作为参数传递到过滤器内部,然后在过滤器功能内部访问它们。为了使它更干净,您可以在过滤器内部使用
.filter
&
.indexOf

HTML

<body ng-controller="MainCtrl">
    <ul>
      <li ng-repeat="item in arr1 | matcher: arr2">
        {{item}}
      </li>
    </ul>
</body>

@Ryan很高兴看到它确实对您有所帮助……谢谢:)完成。15分钟的接受回答延迟真的很烦人。再次感谢,没问题。您知道是否可以将此过滤器设置为一个对象数组(即仅返回
红色
橙色
):@Ryan如果您使用
\ucode>lodash.js,它可能看起来像这样,那么它可能会更简单,看起来很棒。我正在使用lodash-这是lodash 3.10的Plunker:@Ryan很高兴看到它确实帮助了你…谢谢:)完成了。15分钟的接受回答延迟真的很烦人。再次感谢,没问题。您知道是否可以将此过滤器设置为一个对象数组(即仅返回
红色
橙色
):@Ryan如果您使用
\ucode>lodash.js,它可能看起来像这样,那么它可能会更简单,看起来很棒。我正在使用lodash-以下是lodash 3.10的Plunker: