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
filter
filtro (consulte la documentación ):Fiddle
fuente
filter:{polarity:polarityToFilter}
donde$scope.polarityToFilter
se rellena haciendo clic en uno de los tres botones. Es esto lo que estas tratando de hacer ?$index
propiedad 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
age
en ladata
matriz ytrue
es para la coincidencia exacta.Para un filtrado profundo,
El
$
es una propiedad especial para el filtro profundo ytrue
es 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