vue过滤器
vue中的过滤器只能在插值表达式或者v-bind指令中使用
1、全局过滤器
(1)语法
定义过滤器:
Vue.filter('过滤器名称',function(参数1,参数2,...,参数n)
{
//代码
}
过滤器的调用:
<div id="app">
{{msg|过滤器名称}}
<input :style="styleObj" type="text" name="" id="" :value="msg|过滤器名称" />
</div>
其中,参数1永远是|运算符前面的变量,参数2至参数n是用户自定义的参数,可省略
(2)示例
a、全局过滤器的基本使用
代码:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>
<body>
<div id="app">
{{msg|firstFilter}}
<input :style="styleObj" type="text" name="" id="" :value="msg|firstFilter" />
</div>
<script type="text/javascript">
Vue.filter('firstFilter',function(data){
return data.replace(/青/g,'250');
});
var vm=new Vue({
el:'#app',
data:{
msg:'青春啊青春,美丽的青春;狗爷退役了,我的青春结束了,爷青结!',
styleObj:'display:block;width:100%',
},
methods:{
},
})
</script>
</body>
</html>
效果:
b、全局过滤器的串联使用
代码:注意这里,第二个过滤器的名称是中文,但是也不会报错,也就是说,过滤器名称可以是中文,但是不建议这么做
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>
<body>
<div id="app">
{{msg|firstFilter|第二个过滤器}}
<input :style="styleObj" type="text" name="" id="" :value="msg|firstFilter|第二个过滤器" />
</div>
<script type="text/javascript">
Vue.filter('firstFilter',function(data){
return data.replace(/青/g,'250');
});
Vue.filter('第二个过滤器',function(data){
return data.replace(/250/g,'***');
});
var vm=new Vue({
el:'#app',
data:{
msg:'青春啊青春,美丽的青春;狗爷退役了,我的青春结束了,爷青结!',
styleObj:'display:block;width:100%',
},
methods:{
},
})
</script>
</body>
</html>
效果:
c、给全局过滤器的回调函数增加参数
代码:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>
<body>
<div id="app">
{{msg|firstFilter|第二个过滤器('参数二','参数三')}}
<input :style="styleObj" type="text" name="" id="" :value="msg|firstFilter|第二个过滤器('参数二','参数三')" />
</div>
<script type="text/javascript">
Vue.filter('firstFilter',function(data){
return data.replace(/青/g,'250');
});
Vue.filter('第二个过滤器',function(data,newData1,newData2){
return data.replace(/250/g,'***')+newData1+newData2;
});
var vm=new Vue({
el:'#app',
data:{
msg:'青春啊青春,美丽的青春;狗爷退役了,我的青春结束了,爷青结!',
styleObj:'display:block;width:100%',
},
methods:{
},
})
</script>
</body>
</html>
效果:
2、私有过滤器
(1)语法
定义私有过滤器:
<script type="text/javascript">
var vm=new Vue({
el:'#app',
data:{
msg:'青春啊青春,美丽的青春;狗爷退役了,我的青春结束了,爷青结!',
styleObj:'display:block;width:100%',
},
methods:{
},
filters:{//定义私有过滤器
firstFilter:function(data)//过滤器名称
{
return data.replace(/青/g,'250');
}
}
})
</script>
调用和全局过滤器相同。
(2)示例
a、私有过滤器的基本使用(和全局过滤器相同)
b、私有过滤器的串联使用(和全局过滤器相同)
c、给私有过滤器的回调函数增加参数(和全局过滤器相同)
d、当全局过滤器和私有过滤器重名时(默认调用私有过滤器)
这个很好理解,当私有变量和全局变量重名时,默认调用私有变量,几乎所有编程语言都是这样。
代码:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>
<body>
<div id="app">
{{msg|firstFilter|secondFilter('+++')}}
<input :style="styleObj" type="text" name="" id="" :value="msg|firstFilter|secondFilter('+++')" />
</div>
<script type="text/javascript">
Vue.filter('firstFilter',function(data){
return data.replace(/春/g,'250');
})
var vm=new Vue({
el:'#app',
data:{
msg:'青春啊青春,美丽的青春;狗爷退役了,我的青春结束了,爷青结!',
styleObj:'display:block;width:100%',
},
methods:{
},
filters:{
firstFilter:function(data){
return data.replace(/青/g,'250');
},
secondFilter:function(data,newData){
return data.replace(/250/g,'***')+newData;
}
}
})
</script>
</body>
</html>
结果: