通过一个实际的例子说明2.0版本中过滤器的用法。代码如下:
<div id="app">
<span>SearchByName: </span>
<input v-model="searchQuery">
<table>
<thead>
<tr>
<td v-for="col in columns">{
{col|capitalize}}</td>
</tr>
</thead>
<tbody>
<tr v-for="entry in filteredData">
<td v-for="col in columns">{
{entry[col]}}</td>
</tr>
</tbody>
</table>
</div>
<script src="vue.js"></script>
<script>
new Vue({
el: '#app',
data: {
searchQuery: '',
columns: ['name', 'gender', 'age'],
data: [{
name: 'Jack',
gender: 'male',
age: 26
}, {
name: 'John',
gender: 'female',
age: 20
}, {
name: 'Lucy',
gender: 'female',
age: 16
}]
},
filters: {
capitalize: function (value) {
return value.charAt(0).toUpperCase() + value.slice(1);
}
},
computed: {
filteredData: function () {
var self = this;
return this.data.filter(function (item) {
return item.name.toLowerCase().indexOf(self.searchQuery.toLowerCase()) !== -1;
})
}
}
});
</script>
以上代码动态渲染了一个列表,同时设计了搜索框,实现了动态过滤效果,整体效果如下:
从以上代码可以看到过滤器的具体用法:
1、capitalize是实现首字母大写的过滤器,在1.0版本中是内置的,这里要自己实现,放在Vue对象的filters属性中,其中参数value保存着文本{ {}}中待过滤的变量。
2、在我们实现动态过滤data中的数据项的时候,1.0版本是在v-for指令后边加上过滤器,2.0版本里边放在计算属性(computed)中,同时v-for指令中原来的data变成计算属性filteredData。