目录
1.局部过滤器
2.全局过滤器
3.总结
这一小节我们来学一个比较简单的东西,Vue的过滤器,先声明一下,这个过滤器并不是很必要的东西,它只是Vue给我们提供的一个新的数据处理的方式而已。想用的话就用,不想用的话也可以通过计算属性,methods来实现。
1.局部过滤器
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>条件渲染</title>
<!--引入Vue-->
<script type="text/javascript" src="../js/vue.js"></script>
<script type="text/javascript" src="../js/dayjs.min.js"></script>
<style>
</style>
</head>
<body>
<!--准备好一个容器-->
<div id="root">
<h2>显示格式化后的时间</h2>
<!-- 计算属性实现 -->
<h3>现在是:{{fmtTime}}</h3>
<!-- methods实现 -->
<h3>现在是:{{getFmtTime()}}</h3>
<!-- 过滤器实现 -->
<h3>现在是:{{time | timeFormater}}</h3>
<!-- 过滤器实现(传参),过滤器可以串联传递 -->
<h3>现在是:{{time | timeFormater('YYYY年MM月DD日') | mySlice}}</h3>
</div>
</body>
<script type="text/javascript">
Vue.config.productionTip = false //阻止Vue在启动时生成生产提示
const vm = new Vue({
el:'#root',
data:{
time:1658106191557
},
methods: {
getFmtTime(){
return dayjs(this.time).format('YYYY年MM月DD日 HH:mm:ss')
}
},
computed:{
fmtTime(){
return dayjs(this.time).format('YYYY年MM月DD日 HH:mm:ss')
}
},
filters:{
timeFormater(value,str='YYYY年MM月DD日 HH:mm:ss'){
return dayjs(this.time).format(str)
},
mySlice(value){
return value.slice(0,4)
}
}
})
</script>
</html>
实现效果:
上面我们就展示了过滤器的基本用法,但是我们上面展示的这种过滤器用法都是属于局部过滤器,它是写在一个new Vue实例中的,当我们再new另外一个Vue实例的话,之前的过滤器在这个新的实例中就用不了。虽然我们还没有学到组件的概念,但是当以后我们开发的话,是会用到多个组件的。而一个组件就相当于一个微型的vm,它比vm身上少了一些东西。
如果我们定义的是刚刚所使用的局部过滤器,那么组件A就无法使用组件B中定义的局部过滤器test ,组件B也无法使用组件A中定义的局部过滤器demo。
2.全局过滤器
与局部过滤器对应的就是全局过滤器,我们下面再看一下怎么定义一个全局过滤器
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>条件渲染</title>
<!--引入Vue-->
<script type="text/javascript" src="../js/vue.js"></script>
<script type="text/javascript" src="../js/dayjs.min.js"></script>
<style>
</style>
</head>
<body>
<!--准备好一个容器-->
<div id="root">
<h2>显示格式化后的时间</h2>
<!-- 计算属性实现 -->
<h3>现在是:{{fmtTime}}</h3>
<!-- methods实现 -->
<h3>现在是:{{getFmtTime()}}</h3>
<!-- 过滤器实现 -->
<h3>现在是:{{time | timeFormater}}</h3>
<!-- 过滤器实现(传参),过滤器可以串联传递 -->
<h3>现在是:{{time | timeFormater('YYYY年MM月DD日') | mySlice}}</h3>
<h3 :x="msg | mySlice"> 标签v-bind属性也可以使用过滤器</h3>
</div>
<div id="root2">
<h2>{{msg | mySlice}}</h2>
</div>
</body>
<script type="text/javascript">
Vue.config.productionTip = false //阻止Vue在启动时生成生产提示
//全局过滤器
Vue.filter('mySlice',function(value){
return value.slice(0,4)
})
const vm = new Vue({
el:'#root',
data:{
time:1658106191557,
msg:'张三李四王五赵六'
},
methods: {
getFmtTime(){
return dayjs(this.time).format('YYYY年MM月DD日 HH:mm:ss')
}
},
computed:{
fmtTime(){
return dayjs(this.time).format('YYYY年MM月DD日 HH:mm:ss')
}
},
//局部过滤器
filters:{
timeFormater(value,str='YYYY年MM月DD日 HH:mm:ss'){
return dayjs(this.time).format(str)
}
}
})
new Vue({
el: '#root2',
data: {
msg:'张三李四王五赵六'
}
})
</script>
</html>
实现效果:
3.总结
过滤器:
定义:对要显示的数据进行特定格式化后再显示(适用于一些简单逻辑的处理)
语法:
1.注册过滤器:Vue.filter(name,callback) 或 new Vue{filters:{}}
2.使用过滤器:{{ xxx | 过滤器名}} 或 v-bind:属性 = 'xxx | 过滤器名'
备注:
1.过滤器也可以接收额外参数,多个过滤器也可以串联
2.并没有改变原本的数据,是产生新的对应的数据