Estou tentando criar um filtro personalizado no AngularJS que filtrará uma lista de objetos pelos valores de uma propriedade específica. Nesse caso, quero filtrar pela propriedade "polaridade" (valores possíveis de "Positivo", "Neutro", "Negativo").
Aqui está o meu código de trabalho sem o filtro:
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>
Aqui está a matriz "$ scope.tweets" no formato 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"}}
O melhor filtro que eu poderia criar da seguinte maneira:
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;
};
});
Este método retorna uma matriz vazia. E nada é impresso a partir da declaração "console.log (polaridade)". Parece que não estou inserindo os parâmetros corretos para acessar a propriedade do objeto "polaridade".
Alguma ideia? Sua resposta é muito apreciada.
javascript
angularjs
sh3nan1gans
fonte
fonte
Respostas:
Você simplesmente precisa usar o
filter
filtro (consulte a documentação ):Fiddle
fonte
filter:{polarity:polarityToFilter}
onde$scope.polarityToFilter
é preenchido por um clique em um dos três botões. É isso que você está tentando fazer?$index
propriedade no escopo local que você também pode usar.A documentação tem a resposta completa. De qualquer forma, é assim que é feito:
filtrará apenas
age
nadata
matriz etrue
corresponde à correspondência exata.Para filtragem profunda,
A
$
é uma propriedade especial para filtro de fundo e otrue
é para correspondência exata como acima.fonte
Você também pode fazer isso para torná-lo mais dinâmico.
Então você ng-repeat ficará assim
É claro que este filtro será usado apenas para filtrar por polaridade
fonte
Temos coleção como abaixo:
Sintaxe:
Exemplo:
-OU-
Sintaxe:
Exemplo:
fonte
Você pode tentar isso. seu trabalho para mim 'nome' é uma propriedade em arr.
fonte