如何通过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(极性)”语句打印。 好像我没有插入正确的参数来访问“极性”的对象属性。
有任何想法吗? 非常感谢您的回复。
您只需使用filter
器filter
器(请参阅文档 ):
<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
数组中的age
, true
表示完全匹配。
对于深度过滤,
<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"