文章目录
案例:将时间戳转换为我们能够读懂的形式
处理时间的第三方库:dayjs:https://cdn.bootcdn.net/ajax/libs/dayjs/1.11.3/dayjs.min.js
computer和methods的实现
<!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>Document</title>
<script type="text/javascript" src="../js/vue.js"></script>
<script type="text/javascript" src="../js/dayjs.min.js"></script>
</head>
<body>
<div id="root">
<h2>现在是:{{time}}</h2>
<!-- 计算属性实现 -->
<h2>现在是:{{fmtTime}}</h2>
<!-- methods实现 -->
<h2>现在是:{{getFmtTime()}}</h2>
</div>
<script type='text/javascript'>
Vue.config.productionTip = false;
new Vue({
el:'#root',
data: {
time:1658137279155
},
computed:{
fmtTime(){
return dayjs(this.time).format('YYYY-MM-DD HH:mm:ss')
}
},
methods: {
getFmtTime(){
return dayjs(this.time).format('YYYY-MM-DD HH:mm:ss')
}
},
})
</script>
</body>
</html>
过滤器定义
过滤器:
- 定义:对要显示的数据进行
特定格式化
后再显示(适用于一些简单逻辑的处理)。 - 语法:
- 注册过滤器:
new vue({filters:{}})
- 使用过滤器:
{{ xxx│过滤器名}}
xxx
会作为参数传递给过滤器,过滤器执行完毕之后返回结果会直接代替页面的{{ xxx│过滤器名}}
进行显示。
过滤器使用
过滤器实现上述功能
<!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>Document</title>
<script type="text/javascript" src="../js/vue.js"></script>
<script type="text/javascript" src="../js/dayjs.min.js"></script>
</head>
<body>
<div id="root">
<h2>现在是:{{time}}</h2>
<!--过滤器实现 -->
<h2>现在是:{{time | timeFormater}}</h2>
</div>
<script type='text/javascript'>
Vue.config.productionTip = false;
new Vue({
el:'#root',
data: {
time:1658137279155
},
filters:{
// 公路起的本质就是一个函数
timeFormater(value){
return dayjs(value).format('YYYY-MM-DD HH:mm:ss')
}
}
})
</script>
</body>
</html>
过滤器实现过程
备注
过滤器传递多个参数
过滤器也可以接收额外参数,但是第一个参数一定是 |
前面的值。
<!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>Document</title>
<script type="text/javascript" src="../js/vue.js"></script>
<script type="text/javascript" src="../js/dayjs.min.js"></script>
</head>
<body>
<div id="root">
<h2>现在是:{{time}}</h2>
<h2>现在是:{{time | timeFormater}}</h2>
<h2>现在是:{{time | timeFormater('YYYY年MM月DD日')}}</h2>
</div>
<script type='text/javascript'>
Vue.config.productionTip = false;
new Vue({
el:'#root',
data: {
time:1658137279155
},
filters:{
// 过滤器的本质就是一个函数
timeFormater(value,str="YYYY-MM-DD HH:mm:ss"){
return dayjs(value).format(str)
}
}
})
</script>
</body>
</html>
多个过滤器也可以串联
格式:{{变量名 | 过滤器1| 过滤器2|...}}
过滤器1的结果作为过滤器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>Document</title>
<script type="text/javascript" src="../js/vue.js"></script>
<script type="text/javascript" src="../js/dayjs.min.js"></script>
</head>
<body>
<div id="root">
<h2>现在是:{{time}}</h2>
<h2>现在是:{{time | timeFormater}}</h2>
<h2>现在是:{{time | timeFormater('YYYY年MM月DD日') | mySlice()}}</h2>
</div>
<script type="text/javascript">
Vue.config.productionTip = false;
new Vue({
el: "#root",
data: {
time: 1658137279155,
},
filters: {
// 过滤器的本质就是一个函数
timeFormater(value, str = "YYYY-MM-DD HH:mm:ss") {
return dayjs(value).format(str);
},
mySlice(value) {
return value.slice(0, 4);
},
},
});
</script>
</body>
</html>
全局过滤器
在new vue({filters:{}})中定义的过滤器只能在该vue实例中使用,为了让其他vue实例也可以使用我们可以把过滤器定义成全局的:(在定义vue实例之前就定义好过滤器filter)
格式:
Vue.filter('过滤器名字',function (过滤器参数){
return 过滤器处理;
})
eg:
<!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>Document</title>
<script type="text/javascript" src="../js/vue.js"></script>
<script type="text/javascript" src="../js/dayjs.min.js"></script>
</head>
<body>
<div id="root">
<h2>现在是:{{time}}</h2>
<!--过滤器实现 -->
<h2>现在是:{{time | timeFormater}}</h2>
<h2>现在是:{{time | timeFormater('YYYY年MM月DD日') | mySlice()}}</h2>
</div>
<script type="text/javascript">
Vue.config.productionTip = false;
// 全局过滤器
Vue.filter('mySlice',function (value){
return value.slice(0, 4);
})
new Vue({
el: "#root",
data: {
time: 1658137279155,
},
filters: {
// 过滤器的本质就是一个函数
timeFormater(value, str = "YYYY-MM-DD HH:mm:ss") {
return dayjs(value).format(str);
}
},
});
</script>
</body>
</html>
过滤的使用地方
- 在插值语法中使用:前面的例子都是在插值语法中使用。
- 在
v-bind
中使用
<!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>Document</title>
<script type="text/javascript" src="../js/vue.js"></script>
<script type="text/javascript" src="../js/dayjs.min.js"></script>
</head>
<body>
<div id="root">
<h2 :x="msg | mySlice"></h2>
</div>
<script type="text/javascript">
Vue.config.productionTip = false;
// 全局过滤器
Vue.filter('mySlice',function (value){
return value.slice(0, 4);
})
new Vue({
el: "#root",
data: {
time: 1658137279155,
msg:'hello 你好'
},
filters: {
// 过滤器的本质就是一个函数
timeFormater(value, str = "YYYY-MM-DD HH:mm:ss") {
return dayjs(value).format(str);
}
},
});
</script>
</body>
</html>
控制台:
过滤器的特点
并没有改变原本的数据,是产生新的对应的数据
过滤器总结
- 注册过滤器:
Vue.filter(name,callback)
(局部过滤器)或new Vue{filters:{}}
(全局过滤器) - 使用过滤器:
{{ xxx│过滤器名}}
或v-bind:属性=“xxx|过滤器名"
xxx
会作为参数传递给过滤器,过滤器执行完毕之后返回结果会直接代替页面的{{ xxx│过滤器名}}
进行显示。