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

13 浏览
0 Comments

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

我正在尝试在AngularJS中创建一个自定义过滤器,通过特定属性的值来过滤对象列表。在这种情况下,我想通过"polarity"属性(可能的值为"Positive"、"Neutral"、"Negative")来进行过滤。

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

HTML:

    

{{tweets.length}} {{tweets.length|posFilter}} {{tweets.length|neutFilter}} {{tweets.length|negFilter}}

这里是以JSON格式显示的"$scope.tweets"数组:

{{created_at: "日期", text: "推文内容", user:{name: "用户名", screen_name: "用户昵称", profile_image_url: "头像"}, retweet_count: "转发数", polarity: "正面"},
 {created_at: "日期", text: "推文内容", user:{name: "用户名", screen_name: "用户昵称", profile_image_url: "头像"}, retweet_count: "转发数", polarity: "正面"},
 {created_at: "日期", text: "推文内容", user:{name: "用户名", screen_name: "用户昵称", profile_image_url: "头像"}, retweet_count: "转发数", polarity: "正面"}}

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

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(polarity)"语句中没有打印任何内容。似乎我没有插入正确的参数来访问"polarity"对象属性。

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

0
0 Comments

在AngularJS中,如何根据对象属性进行过滤

问题的原因是:用户想要在ng-click事件中传递自定义的过滤器来过滤项目列表,而不是在ng-repeat语句中。用户想要在结果上方放置三个“极性”按钮,根据评级进行过滤。

解决方法是:使用filter过滤器即可实现。用户可以通过传递一个作用域变量来选择要过滤的极性,而不是传递纯文本。例如:filter:{polarity:polarityToFilter},其中polarityToFilter是通过点击三个按钮之一来填充的$scope变量。

然而,用户的应用程序还需要能够删除单个列表项。过滤的问题在于每次应用过滤器时都会创建一个新数组,这会破坏过滤项与未过滤数组中的原始索引之间的关联。用户想要知道是否有一种方法可以保持关联,或者ng-hide是唯一的选择。用户找到了一个使用ng-hide替代过滤的教程。另外,ngRepeat指令还提供了一个本地作用域的$index属性,用户也可以使用它来进行过滤。

用户通过使用ng-hide成功地实现了过滤。用户当前的删除方法如下:

$scope.delete = function (idx) {

$scope.tweets.splice(idx, 1);

}

使用普通的过滤器时,该方法不能删除当前的列表项。例如,如果过滤数组并删除新过滤数组的索引0处的项,则会删除未过滤数组的索引0处的项。而使用ng-hide方法可以解决这个问题。

最后,提到了一个Fiddle链接,这个链接对用户非常有帮助。在用户的情况下,tweets是一个数组,所以过滤器返回一个只有一个元素的数组。用户需要使用(tweets | filter:{polarity:'Positive'})[0].length来获取过滤后的数组长度。

0
0 Comments

问题出现的原因:需要在AngularJS中根据对象属性进行过滤,但是当前的ng-repeat过滤器只能根据固定的属性进行过滤,无法动态指定过滤属性。

解决方法:可以通过在输入框中使用ng-model绑定一个变量,然后在ng-repeat中使用filter过滤器,并将过滤属性绑定到该变量上。

具体代码如下:


以上代码中,通过ng-model将输入框中的值绑定到text.polarity变量上,然后在ng-repeat中使用filter:text进行过滤,即可根据text.polarity属性对tweets进行过滤。

0
0 Comments

这个问题的出现原因是有人想知道在AngularJS中如何通过对象属性来进行过滤,以及是否需要编写自定义代码来实现这个功能。下面是解决这个问题的方法:

在AngularJS文档中有完整的答案。无论如何,以下是解决方法:


  • {{i | json }}
  • 这段代码将只过滤`data`数组中的`age`属性,并且`true`表示精确匹配。

    如果需要进行深度过滤,可以使用以下代码:

  • {{i}}
  • 其中`$`是用于深度过滤的特殊属性,`true`表示精确匹配,与上面的代码类似。

    简单而干净。

    这个过滤器是内置的还是需要在Angular和AngularJS中编写自定义代码?

    0