Javascript angularjs ng基于单击时的数组值重复筛选

Javascript angularjs ng基于单击时的数组值重复筛选,javascript,angularjs,html,angularjs-ng-repeat,Javascript,Angularjs,Html,Angularjs Ng Repeat,我有一个数组$scope.something=['xyz','abc','pqr'] 单击后,我想过滤ng repeat数据,这样它将返回使用'xyz'、'pqr'和'abc'过滤的结果JSON数据 ng repeat=“flt_det中的数据过滤器:某物” 提前感谢。如果您希望使用$scope.something中的任何匹配元素筛选数据,则可能需要使用自定义筛选器: app.filter("somethingFilter", function() { return function(ar

我有一个数组
$scope.something=['xyz','abc','pqr']

单击后,我想过滤
ng repeat
数据,这样它将返回使用
'xyz'
'pqr'
'abc'
过滤的结果JSON数据

ng repeat=“flt_det中的数据过滤器:某物”


提前感谢。

如果您希望使用
$scope.something中的任何匹配元素筛选数据,则可能需要使用自定义筛选器:

app.filter("somethingFilter", function() {
   return function(array, something) {
     return array.filter(function(ele) {
          return (something.indexOf(ele) > 0)
      });
   }
});
现在在HTML中

ng-repeat="data in flt_det | filter:something".
如果数据存在于
某物
数组中,这将过滤
flt_det

点击一个按钮

这将在单击按钮时更新
$scope.flt_det
数据

在这种情况下,您甚至可以使用
$filter

app.controller("myCtrl", function($scope, $filter)
{
    $scope.buttonClickHandler = function() {
        $scope.flt_det = $filter('somethingFilter')($scope.flt_det,$scope.something);
    };
});
编辑演示

角度模块(“应用程序”,[]) .controller(“MainCtrl”,函数($scope){ $scope.flt_det=[“abc”、“pqr”、“SDF”、“SDFD”、“xyz”]; $scope.something=[“abc”、“pqr”、“xyz”]; $scope.buttonClickHandler=函数(){ $scope.flt_det=$scope.flt_det.filter(函数(ele)){ 返回($scope.something.indexOf(ele)>0) }); } });

JS-Bin
{{data}}
过滤数据

编辑:修复了使用数组输入进行过滤的问题

如果要在控制器中使用内置角度过滤器而不是自定义过滤器,另一个选项是执行以下操作(工作):


有关在控制器中使用过滤器的信息,请参阅此处的角度文档:

否这是其他一些场景。点击是在一个按钮上。我需要基于3值的结果,我们可以在点击单个按钮时执行此操作吗?使用buttonClick handler更新。还添加了一个演示:)@user2131395 OP想要使用
$scope.something
数组来过滤另一个数组
$scope.flt\u det
。但是$filter将使用作为第二个参数的原语值来过滤第一个参数
array
。谢谢@mohamedrias,肯定误解了这个问题。修正了答案
app.controller("myCtrl", function($scope, $filter)
{
    $scope.buttonClickHandler = function() {
        $scope.flt_det = $filter('somethingFilter')($scope.flt_det,$scope.something);
    };
});
$scope.filtered = [];
    for(var index = 0; index < $scope.something.length; index++) {
      var singleFilter = $filter('filter')($scope.flt_det, $scope.something[index]);
      $scope.filtered = _.union($scope.filtered, singleFilter);
    }
ng-repeat="data in filtered"