J'essaie de créer un filtre personnalisé dans AngularJS qui filtrera une liste d'objets en fonction des valeurs d'une propriété spécifique. Dans ce cas, je souhaite filtrer selon la propriété "polarité" (valeurs possibles de "positif", "neutre", "négatif").
Voici mon code de travail sans le filtre:
HTML:
<div class="total">
<h2 id="totalTitle"></h2>
<div>{{tweets.length}}</div>
<div id="totalPos">{{tweets.length|posFilter}}</div>
<div id="totalNeut">{{tweets.length|neutFilter}}</div>
<div id="totalNeg">{{tweets.length|negFilter}}</div>
</div>
Voici le tableau "$ scope.tweets" au format JSON:
{{created_at: "Date", text: "Tweet text", user:{name: "user name", screen_name: "user screen name", profile_image_url: "profile pic"}, retweet_count: "retweet count", polarity: "Positive"},
{created_at: "Date", text: "Tweet text", user:{name: "user name", screen_name: "user screen name", profile_image_url: "profile pic"}, retweet_count: "retweet count", polarity: "Positive"},
{created_at: "Date", text: "Tweet text", user:{name: "user name", screen_name: "user screen name", profile_image_url: "profile pic"}, retweet_count: "retweet count", polarity: "Positive"}}
Le meilleur filtre que je puisse trouver comme suit:
myAppModule.filter('posFilter', function(){
return function(tweets){
var polarity;
var posFilterArray = [];
angular.forEach(tweets, function(Tweet){
polarity = Tweet.polarity;
console.log(polarity);
if(polarity==='Positive'){
posFilterArray.Push(Tweet);
}
//console.log(polarity);
});
return posFilterArray;
};
});
Cette méthode retourne un tableau vide. Et rien n'est imprimé à partir de l'instruction "console.log (polarité)". Il semble que je n'insère pas les paramètres corrects pour accéder à la propriété de l'objet "polarité".
Des idées? Votre réponse est grandement appréciée.
Vous devez simplement utiliser le filtre filter
(voir le documentation ):
<div id="totalPos">{{(tweets | filter:{polarity:'Positive'}).length}}</div>
<div id="totalNeut">{{(tweets | filter:{polarity:'Neutral'}).length}}</div>
<div id="totalNeg">{{(tweets | filter:{polarity:'Negative'}).length}}</div>
Le documentation a la réponse complète. Quoi qu'il en soit, voici comment cela se fait:
<input type="text" ng-model="filterValue">
<li ng-repeat="i in data | filter:{age:filterValue}:true"> {{i | json }}</li>
ne filtrera que age
dans data
tableau et true
correspond à la correspondance exacte.
Pour le filtrage en profondeur,
<li ng-repeat="i in data | filter:{$:filterValue}:true"> {{i}}</li>
Le $
est une propriété spéciale pour le filtre en profondeur et le true
pour une correspondance exacte, comme ci-dessus.
Vous pouvez également le faire pour le rendre plus dynamique.
<input name="filterByPolarity" data-ng-model="text.polarity"/>
Ensuite, vous ressemblerez à ceci
<div class="Tweet" data-ng-repeat="Tweet in tweets | filter:text"></div>
Ce filtre ne sera bien sûr utilisé que pour filtrer par polarité
Nous avons Collection comme ci-dessous:
Syntaxe:
{{(Collection/array/list | filter:{Value : (object value)})[0].KeyName}}
Exemple:
{{(Collectionstatus | filter:{Value:dt.Status})[0].KeyName}}
- OU -
Syntaxe:
ng-bind="(input | filter)"
Exemple:
ng-bind="(Collectionstatus | filter:{Value:dt.Status})[0].KeyName"
Vous pouvez essayer ça. ça marche pour moi 'name' est une propriété dans arr.
repeat="item in (tagWordOptions | filter:{ name: $select.search } ) track by $index