如何通过angularJS中的对象属性进行过滤

我正在尝试在AngularJS中创build一个自定义filter,它将通过特定属性的值来过滤对象列表。 在这种情况下,我想通过“极性”属性进行过滤(“正”,“中性”,“负”的可能值)。

这是我没有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> 

这里是JSON格式的“$ scope.tweets”数组:

 {{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"}} 

我可以拿出最好的filter,如下所示:

 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; }; }); 

此方法返回一个空数组。 并没有什么是从“console.log(极性)”语句打印。 好像我没有插入正确的参数来访问“极性”的对象属性。

有任何想法吗? 非常感谢您的回复。

您只需使用filterfilter器(请参阅文档 ):

 <div id="totalPos">{{(tweets | filter:{polarity:'Positive'}).length}}</div> <div id="totalNeut">{{(tweets | filter:{polarity:'Neutral'}).length}}</div> <div id="totalNeg">{{(tweets | filter:{polarity:'Negative'}).length}}</div> 

小提琴

文件有完整的答案。 无论如何,这是如何做到的:

 <input type="text" ng-model="filterValue"> <li ng-repeat="i in data | filter:{age:filterValue}:true"> {{i | json }}</li> 

将仅过滤data数组中的agetrue表示完全匹配。

对于深度过滤,

 <li ng-repeat="i in data | filter:{$:filterValue}:true"> {{i}}</li> 

$是深度filter的特殊属性, true是像上面那样精确匹配的。

你也可以做到这一点,使其更具活力。

 <input name="filterByPolarity" data-ng-model="text.polarity"/> 

那么你重复将看起来像这样

 <div class="tweet" data-ng-repeat="tweet in tweets | filter:text"></div> 

这个filter当然只能用于极性过滤

你可以试试这个 它为我工作的'名字'是在ARR的财产。

 repeat="item in (tagWordOptions | filter:{ name: $select.search } ) track by $index 

我们收集如下:
在这里输入图像说明

语法: {{(Collection/array/list | filter:{Value : (object value)})[0].KeyName}}
例如: {{(Collectionstatus | filter:{Value:dt.Status})[0].KeyName}}
要么
语法: ng-bind="(input | filter)"
例如: ng-bind="(Collectionstatus | filter:{Value:dt.Status})[0].KeyName"