首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在angularJS中按对象属性进行过滤

如何在angularJS中按对象属性进行过滤
EN

Stack Overflow用户
提问于 2013-07-23 01:29:52
回答 4查看 254.6K关注 0票数 141

我正在尝试在AngularJS中创建一个自定义筛选器,它将根据特定属性的值来筛选对象列表。在这种情况下,我希望通过“极性”属性(可能的值为“正”、“中性”、“负”)进行过滤。

以下是我没有使用过滤器的工作代码:

HTML:

代码语言:javascript
复制
<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“数组:

代码语言:javascript
复制
{{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"}}

我能想出的最好的过滤器如下:

代码语言:javascript
复制
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(极性)”语句中打印任何内容。似乎我没有插入正确的参数来访问“极性”的对象属性。

有什么想法吗?非常感谢您的回复。

EN

回答 4

Stack Overflow用户

发布于 2015-05-22 20:05:41

documentation有完整的答案。不管怎么说,它是这样做的:

代码语言:javascript
复制
<input type="text" ng-model="filterValue">
<li ng-repeat="i in data | filter:{age:filterValue}:true"> {{i | json }}</li>

将仅过滤data数组中的age,并且true用于完全匹配。

对于深度过滤,

代码语言:javascript
复制
<li ng-repeat="i in data | filter:{$:filterValue}:true"> {{i}}</li>

$是用于深度过滤的特殊属性,true用于如上所述的精确匹配。

票数 27
EN

Stack Overflow用户

发布于 2014-05-05 03:01:27

您也可以这样做,以使其更具动态性。

代码语言:javascript
复制
<input name="filterByPolarity" data-ng-model="text.polarity"/>

然后,您的ng-repeat将如下所示

代码语言:javascript
复制
<div class="tweet" data-ng-repeat="tweet in tweets | filter:text"></div>

当然,此过滤器仅用于根据极性进行过滤

票数 23
EN

Stack Overflow用户

发布于 2017-01-31 20:03:12

我们有如下的Collection:

语法:

代码语言:javascript
复制
{{(Collection/array/list | filter:{Value : (object value)})[0].KeyName}}

示例:

代码语言:javascript
复制
{{(Collectionstatus | filter:{Value:dt.Status})[0].KeyName}}

-或-

语法:

代码语言:javascript
复制
ng-bind="(input | filter)"

示例:

代码语言:javascript
复制
ng-bind="(Collectionstatus | filter:{Value:dt.Status})[0].KeyName"
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17793751

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档