Voici l'implémentation d'un filtre personnalisé, qui filtrera les données en utilisant un tableau de valeurs, et qui supportera un objet à clés multiples avec un tableau et une seule valeur de clés. Comme mentionné dans l'API inangularJS Doc sur les filtres AngularJS supporte le filtre à clés multiples avec une seule valeur, mais le filtre personnalisé ci-dessous supportera la même fonctionnalité qu'angularJS et supportera également le tableau de valeurs et la combinaison de tableau et de valeur unique de clés,
myApp.filter('filterMultiple',['$filter',function ($filter) {
return function (items, keyObj) {
var filterObj = {
data:items,
filteredData:[],
applyFilter : function(obj,key){
var fData = [];
if (this.filteredData.length == 0)
this.filteredData = this.data;
if (obj){
var fObj = {};
if (!angular.isArray(obj)){
fObj[key] = obj;
fData = fData.concat($filter('filter')(this.filteredData,fObj));
} else if (angular.isArray(obj)){
if (obj.length > 0){
for (var i=0;i<obj.length;i++){
if (angular.isDefined(obj[i])){
fObj[key] = obj[i];
fData = fData.concat($filter('filter')(this.filteredData,fObj));
}
}
}
}
if (fData.length > 0){
this.filteredData = fData;
}
}
}
};
if (keyObj){
angular.forEach(keyObj,function(obj,key){
filterObj.applyFilter(obj,key);
});
}
return filterObj.filteredData;
}
}]);
Utilisation :
arrayOfObjectswithKeys | filterMultiple:{key1:['value1','value2','value3',...etc],key2:'value4',key3:[value5,value6,...etc]}
Voici un exemple de bidouille avec l'implémentation de ce qui précède. "filterMutiple" filtre personnalisé. :::Exemple de violon :: :
17 votes
Vous êtes sûr que
filter:({genres: 'Action'} || {genres: 'Comedy'})
fonctionne même ? il ne fonctionne pas dansangular 1.3.16
.4 votes
Même chose pour la 1.4.8 ! ça ne marche pas ^^.