Vue.js中可以自定义过滤器,用于常见的文本格式化(比如:格式化时间、首字母大写,动态绑定el-tag的样式)
过滤器应该被添加在JavaScript表达式的尾部,由“管道”符号指示。
过滤器可以串联:
{{ message | filterA | filterB }}
在这个例子中,filterA 被定义为接收单个参数的过滤器函数,【表达式 message 的值将作为参数传入到函数中】。然后继续调用同样被定义为接收单个参数的过滤器函数 filterB,将 filterA 的结果传递到 filterB 中。
过滤器是 JavaScript 函数,因此可以接收参数:
{{ message | filterA('arg1', arg2) }}
这里,filterA 被定义为接收三个参数的过滤器函数。其中 message 的值作为第一个参数,普通字符串 'arg1' 作为第二个参数,表达式 arg2 的值作为第三个参数。
过滤器的定义位置:
1.在一个组件的选项中定义本地的过滤器
## demoxx.vue文件中
export default {
name: 'demo',
filters: {
statusFilter(status) {
const statusMap = {
published: 'success',
draft: 'info',
deleted: 'danger'
}
return statusMap[status]
}
},
data() {
## ........省略代码......
2.在创建Vue实例之前全局定义过滤器
##main.js文件中
Vue.filter('capitalize', function (value) {
if (!value) return ''
value = value.toString()
return value.charAt(0).toUpperCase() + value.slice(1)
})
new Vue({
// ...
})
当全局过滤器和局部过滤器重名时,会采用局部过滤器。
过滤器的使用地方:双花括号插值和v-bind表达式
1. 双花括号插值
<el-table-column class-name="status-col" label="Status" width="110">
<template slot-scope="{row}">
<el-tag :type="row.status">
{{ row.status | capitalize }}
</el-tag>
</template>
</el-table-column>
2. 用在v-bind表达式 ( 在一个组件的选项中定义本地的过滤器)
<el-table-column class-name="status-col" label="Status" width="110">
<template slot-scope="{row}">
<el-tag :type="row.status | statusFilter">
{{ row.status }}
</el-tag>
</template>
</el-table-column>
## ........省略代码......
export default {
name: 'demo',
filters: {
statusFilter(status) {
const statusMap = {
published: 'success',
draft: 'info',
deleted: 'danger'
}
return statusMap[status]
}
},
data() {
## ........省略代码......
效果图
================== ===========================================
此处想到了工具类,将公用方法放在一个util.js中,然后在main.js中引入。
util中的方法也同样可以在 双花括号插值和v-bind表达式中使用。
vue--admin框架中util文件的index.js貌似不需要在main.js中引用可以直接使用。