【发布时间】:2017-03-08 23:31:05
【问题描述】:
由于在 Vue 2.0 中,您不能再将多个管道过滤器链接到一个列表(|filterBy 等),如果您有两个或更多选择下拉列表,您应该如何在计算属性中执行此操作?
我希望能够按专辑标题(从选择 1)和按年份(选择 2)排序。
<select v-model="albumFilter">
<option value="All">All</option>
<option value="Album 1">Album 1</option>
<option value="Album 2">Album 2</option>
<option value="Album 3">Album 3</option>
</select>
<select v-model="yearFilter">
<option value="Year">Year</option>
<option value="2017">2017</option>
<option value="2016">2016</option>
<option value="2015">2015</option>
</select>
<ul>
<li v-for="review in filterByAlbum" v-if="review.type === 'recordReview'">
<a :href="review.jsonUrl">
[[ review.title ]]
</a>
</li>
</ul>
Vue js 代码:
data() {
return {
pressEntries: [],
albumFilter: 'All',
yearFilter: 'Year'
}
},
filterByAlbum: function() {
// Select 1 (Album Filter)
switch (this.albumFilter) {
case 'All':
return this.pressEntries;
break;
case 'Neither':
return this.pressEntries.filter(entry => {
return entry.relatedRecording === null
});
break;
default:
return this.pressEntries.filter(entry => {
return entry.relatedRecording === this.albumFilter
});
}
// Select 2 (Year Filter)
if (this.yearFilter === 'Year') {
return this.pressEntries;
}
else {
return this.pressEntries.filter(entry => {
let postDate = new Date(entry.postDate.date);
return JSON.stringify(postDate.getFullYear()) === this.yearFilter;
});
}
}
pressEntries 数据模型从 API 获取数据,我没有费心为其添加代码。每个选择过滤器的每个代码块都单独工作,但不能一起工作。
如果v-for 循环中的filterByAlbum 引用了计算属性,然后又引用了pressEntries 数据模型,那么是否有可能有两个v-for 运行的计算属性(如“ filterByAlbum" 和 "'filterByYear`" 例如)?还是我需要弄清楚如何过滤一个海量计算属性中的所有结果?
【问题讨论】:
标签: javascript vuejs2