Próbuję utworzyć niestandardowy filtr w AngularJS, który będzie filtrował listę obiektów według wartości określonej właściwości. W tym przypadku chcę filtrować według właściwości „polaryzacja” (możliwe wartości „dodatnie”, „neutralne”, „ujemne”).
Oto mój działający kod bez filtra:
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>
Oto tablica „$ scope.tweets” w formacie 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"}}
Najlepszy filtr, jaki mogłem wymyślić, to:
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;
};
});
Ta metoda zwraca pustą tablicę. I nic nie jest drukowane z instrukcji „console.log (polarity)”. Wygląda na to, że nie wstawiam poprawnych parametrów, aby uzyskać dostęp do właściwości obiektu „polaryzacja”.
Jakieś pomysły? Twoja odpowiedź jest bardzo doceniana.
javascript
angularjs
sh3nan1gans
źródło
źródło
Odpowiedzi:
Wystarczy użyć
filter
filtra (patrz dokumentacja ):Fiddle
źródło
filter:{polarity:polarityToFilter}
gdzie$scope.polarityToFilter
jest wypełniana przez kliknięcie jednego z trzech przycisków. Czy to właśnie próbujesz zrobić?$index
właściwość w zakresie lokalnym, której możesz również użyć.Dokumentacja ma pełną odpowiedź. Zresztą tak to się robi:
będzie filtrować tylko
age
wdata
tablicy itrue
służy do dokładnego dopasowania.Do głębokiego filtrowania,
$
Jest szczególnym miejscem dla głębokim filtrze itrue
jest dokładnym mecz jak powyżej.źródło
Możesz to również zrobić, aby uczynić go bardziej dynamicznym.
Wtedy powtórzenie ng będzie wyglądać tak
Ten filtr będzie oczywiście używany tylko do filtrowania według polaryzacji
źródło
Mamy kolekcję, jak poniżej:
Składnia:
Przykład:
-LUB-
Składnia:
Przykład:
źródło
Możesz tego spróbować. pracuje dla mnie „name” jest własnością w arr.
źródło