Vue中可以自定义过滤器,可被用于一些常见的文本格式化。过滤器可以用在两个地方:双花括号插值和 v-bind 表达式 。过滤器应该被添加在 JavaScript 表达式的尾部,由“管道”符号指示。
1、简单过滤器
<!--在v-bind中-->
<div v-bind:id="taskId | addId"></div>
<!--在双花括号中-->
<div>{{message | addStr}}</div>
举个例子,从后端拿到一个状态,状态值为1,2,3,4,需要根据状态值展示状态,html代码:
<ul>
<li v-for="(items,index) in arr" :key=index>{{items.status | showStatus}}</li>
</ul>
js中:
<script>
export default {
data(){
return{
arr:[
{
count:22,
status:1
},
{
count:33,
status:2
},
{
count:55,
status:3
},
{
count:44,
status:4
}
]
}
},
filters:{ //定义过滤器
showStatus:function(value){
let status = '';
if(value == 1){
status = '未完成';
}else if(value == 2){
status = '未提交';
}else if(value == 3){
status = '审核中';
}else{
status = '已审核';
}
return status;
}
}
}
</script>
页面效果:
2、多个过滤器
过滤器函数总接收表达式的值 (之前的操作链的结果) 作为第一个参数。在上述例子中,过滤器showStatus函数将会收到 items.status的值作为第一个参数。
过滤器可以串联:
<ul>
<li v-for="(items,index) in arr" :key=index>{{items.status|showStatus|showCount}}</li>
</ul>
在这个例子中,showStatus被定义为接收单个参数的过滤器函数,表达式 items.status的值将作为参数传入到函数中。然后继续调用同样被定义为接收单个参数的过滤器函数 showCount,将 showStatus的结果传递到 showCount中。
3、过滤器函数传参
过滤器是 JavaScript 函数,因此可以接收参数:
<ul>
<li v-for="(items,index) in arr" :key=index>{{items.status | showStatus('arg1','arg2')}}</li>
</ul>
这里,showStatus被定义为接收三个参数的过滤器函数。其中 showStatus的值作为第一个参数,普通字符串 ‘arg1’ 作为第二个参数,表达式 arg2 的值作为第三个参数。