gpt4 book ai didi

javascript - 如何根据 Angular js 中的两个自定义过滤器过滤数据

转载 作者:可可西里 更新时间:2023-11-01 02:26:50 24 4
gpt4 key购买 nike

我有两个自定义过滤器,我想使用这两个自定义过滤器来过滤我的数据。但是我遇到了问题,如果我一个一个地使用它们,那么它们就可以正常工作,但是当我尝试同时使用两个过滤器时,就没有输出。我的代码如下:

<script>
var myApp = angular.module('myApp', []);
myApp
.filter('selectedTags', function() {
return function(postdata, tags) {
return postdata.filter(function(task) {

for (var i in task.tarn_list) {
if (tags.indexOf(task.tarn_list[i]) != -1) {
return true;
}
}
return false;

});
};
})
.filter('selectedDep', function() {
return function(postdata, tags) {
return postdata.filter(function(task) {

for (var i in task.deployment) {
if (tags.indexOf(task.deployment[i]) != -1) {
return true;
}
}
return false;

});
};
})
.controller('PostList', ['$scope', '$http', function($scope, $http) {
var jsonFile='../../json.php';
$http.get(jsonFile).success(function(data) {
$scope.postdata = data;
});
$scope.useMakes=[]
$scope.checkBoxModel={
search:[],
ddsearch:[]
};
$scope.totalFeatures=features;
$scope.deployment=all_deployment;
}]);
</script>

我的 div 如下所示,我想在其上应用过滤器:

<div ng-repeat="record in postdata | selectedDep:checkBoxModel.ddsearch | selectedTags:checkBoxModel.search" >

最佳答案

没有看到实际的数据集,我认为这里应该漂浮在船上 - 考虑到您在问题中公开的属性和循环的性质;

https://jsfiddle.net/op7m14m1/1/


我选择了嵌套过滤器而不是 for in 循环(这实际上就是您正在做的事情)。

var predicate = [];

dataset.filter(function (a) {
var inner = a.inner.filter(function (b) {
return predicate.indexOf(b) > -1;
});

return inner.length > 0;
});

查看您拥有的两个过滤器,您可以将其分解为一个函数,其中包含一个绑定(bind)(或传入)参数,指定将哪个属性用作过滤器的匹配器。

像这样;

function generic () {
return function (prop, dataset, predicate) {
return dataset.filter(function (element) {

var innards = element[prop].filter(function (iEl) {
return predicate.indexOf(iEl) > -1;
});

return innards.length > 0;
});
}
}

然后要使用它,您可以执行以下操作;

 module.filter('genericFilter', generic);
module.filter('selectedDep', generic.bind(null, 'deployment');
module.filter('selectedTags', generic.bind(null, 'tarn_list');

// $filter('genericFilter')('deployment', [], ['a']);
// $filter('selectedDep')([], ['b']);
// $filter('selectedTags')([], ['c']);

此设置允许一个单一的功能,您可以重复使用您的心脏内容 - 只需传入您想要对其进行深度过滤的属性,或者预先绑定(bind)它。

关于javascript - 如何根据 Angular js 中的两个自定义过滤器过滤数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34355449/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com