filters的实现
当你在v-for循环渲染一个数组对象的时候,是否遇到过这样的问题,对象里面的字段并不是直接渲染在页面上,而是需要经过数据处理才最终展示在页面上。
- 在通过接口获取到数据后,我们可以通过map函数先进行数据处理,再展示到页面上
- 利用vue提供的filters钩子函数,实现数据的过滤处理再渲染处理过后的内容
下面谈一下方式二怎么实现:
- html代码中,{{}}中实现filters的顺序是{{参数|filter函数 |filter函数|…}},后面可以有多个filters函数,前面filters函数返回的结果是后面一个filters函数的参数,并且可以在过滤函数后面加上()里面加上的其他的参数。
- 创建过滤函数,并且在接收传递过来的参数,其中操作链的参数都作为第一个参数接收,其余参数一次排列在后面,如filter(val,unit)
// lists数组为:lists =[{id:1,name:'Seven'},{id:2,name:'Jack Jones'}]
<ul>
<li v-for="item in lists" :key="item.id">{{item.name | filterOne | filterTwo('同学') }}</li>
</ul>
filters:{ //钩子
filterOne(val){ //过滤器函数的名字filterOne,val是传递过来的参数
return val.toUpperCase() //操作之后将结果返回出去
},
filterTwo(val,unit) {
//此处val是经过上一个过滤器filterOne操作之后的返回的结果,unit是参进来的参数
return val+unit
}
}
vue过滤器补充
- filters不仅可以在模版语法中使用,也可以用在vue的生命周期中。
例如在methods的方法中使用:
this.$options.filters [‘filterOne’] (‘LiLi’) // []里面是过滤器名 ,()里面是 参数
- filters还可以接收函数作为参数,如下:
this.$options.filters [‘filterOne’] (‘LiLi’,this.fun(‘小明’))