Filter在vue.js中完全匹配

时间:2015-08-20 15:38:00

标签: javascript vue.js

我有一个列表,我想按id值过滤:

<li v-repeat="release.tracks | filterBy track_format in 'format_id'">

这非常好用,除非format_id是例如12,此时我看到所有带有track_format 1和2的项目。

是否有一种简单的方法只显示值构成完全匹配的项目?我可以放弃使用数字,但我觉得我会继续遇到类似&#34; LP&#34;等格式的问题。与&#34; Deluxe LP&#34;。

2 个答案:

答案 0 :(得分:0)

嗯,这是我刚刚提出的方法,使用自定义过滤器,可行(我仍然想知道这种方法是否是正确的方法)

Vue.filter('matching_format_id', function(value, format_id) {
   return value.filter(function(item) {
       return item.format_id === parseInt(format_id);
   });
});

<li v-repeat="release.tracks | matching_format_id track_format">

ETA:实际上,这并没有那么好用,发布曲目的更改并没有在视图中触发任何类型的更新。下一步,尝试使用计算属性进行过滤:

computed: {
       filteredTracks: function() {
           return this.release.tracks.filter(function (track) {
               return track.format_id === parseInt(vm.track_format);
           });
       }
   },

<li v-repeat="filteredTracks">

到目前为止看起来很有希望,但这就是我对最后一个想法的看法......

答案 1 :(得分:0)

我遇到了类似的问题,并写了一个完全匹配的替代品:

Vue.filter('exactFilterBy', function(array, needle, inKeyword, key) {
    return array.filter(function(item) {
        return item[key] == needle;
    });
});

希望有所帮助!