Estoy tratando de crear un filtro personalizado en AngularJS que filtre una lista de objetos por los valores de una propiedad específica. En este caso, quiero filtrar por la propiedad "polaridad" (valores posibles de "Positivo", "Neutral", "Negativo").
Aquí está mi código de trabajo sin el 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>
Aquí está la matriz "$ scope.tweets" en 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"}}
El mejor filtro que pude encontrar de la siguiente manera:
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 devuelve una matriz vacía. Y nada se imprime desde la declaración "console.log (polaridad)". Parece que no estoy insertando los parámetros correctos para acceder a la propiedad del objeto de "polaridad".
¿Algunas ideas? Su respuesta es muy apreciada.
javascript
angularjs
sh3nan1gans
fuente
fuente

Respuestas:
Simplemente tiene que usar el
filterfiltro (consulte la documentación ):Fiddle
fuente
filter:{polarity:polarityToFilter}donde$scope.polarityToFilterse rellena haciendo clic en uno de los tres botones. Es esto lo que estas tratando de hacer ?$indexpropiedad en el ámbito local que también puede usar.La documentación tiene la respuesta completa. De todos modos, así es como se hace:
filtrará solo
ageen ladatamatriz ytruees para la coincidencia exacta.Para un filtrado profundo,
El
$es una propiedad especial para el filtro profundo ytruees para la coincidencia exacta como arriba.fuente
También podría hacer esto para hacerlo más dinámico.
Entonces ng-repeat se verá así
Por supuesto, este filtro solo se usará para filtrar por polaridad
fuente
Tenemos colección de la siguiente manera:
Sintaxis:
Ejemplo:
-O-
Sintaxis:
Ejemplo:
fuente
Puedes probar esto. está funcionando para mí 'nombre' es una propiedad en arr.
fuente