Ich versuche, in AngularJS einen benutzerdefinierten Filter zu erstellen, der eine Liste von Objekten nach den Werten einer bestimmten Eigenschaft filtert. In diesem Fall möchte ich nach der Eigenschaft "Polarität" filtern (mögliche Werte von "Positiv", "Neutral", "Negativ").
Hier ist mein Arbeitscode ohne Filter:
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>
Hier ist das Array "$ scope.tweets" im JSON-Format:
{{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"}}
Der beste Filter, den ich finden konnte, ist wie folgt:
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;
};
});
Diese Methode gibt ein leeres Array zurück. Aus der Anweisung "console.log (Polarität)" wird nichts gedruckt. Es scheint, als würde ich nicht die richtigen Parameter einfügen, um auf die Objekteigenschaft "Polarität" zuzugreifen.
Irgendwelche Ideen? Ihre Antwort wird sehr geschätzt.
javascript
angularjs
sh3nan1gans
quelle
quelle
Antworten:
Sie müssen lediglich den
filter
Filter verwenden (siehe Dokumentation ):Fiddle
quelle
filter:{polarity:polarityToFilter}
Diese$scope.polarityToFilter
wird durch Klicken auf eine der drei Schaltflächen ausgefüllt. Versuchen Sie das zu tun?$index
Eigenschaft des lokalen Bereichs verfügbar , die Sie auch verwenden können.Die Dokumentation enthält die vollständige Antwort. Wie auch immer, so wird es gemacht:
filtert nur
age
imdata
Array undtrue
ist für die genaue Übereinstimmung.Zur Tiefenfilterung
Das
$
ist eine spezielle Eigenschaft für Tiefenfilter und dastrue
ist für die exakte Übereinstimmung wie oben.quelle
Sie können dies auch tun, um es dynamischer zu gestalten.
Dann wird Ihre ng-Wiederholung so aussehen
Dieser Filter wird natürlich nur zum Filtern nach Polarität verwendet
quelle
Wir haben Sammlung wie folgt:
Syntax:
Beispiel:
-ODER-
Syntax:
Beispiel:
quelle
Sie können dies versuchen. seine Arbeit für mich 'Name' ist eine Eigenschaft in arr.
quelle