1. Vue自定义全局过滤器和自定义全局指令
(1)在插值表达式中,如果需要对变量的格式进行处理,可以使用过滤器,过滤器的使用方法如下:
{{ ctime | dateFormat }},dateFormat即为过滤器函数,它的第一个参数为ctime的值,传入的是ctime的值,返回一个新的值。过滤器可定义为全局过滤器和局部过滤器,全局过滤器为所有vue实例所共享,局部过滤器为当前实例所私用。
Vue.filter('dataFormat',function(dateStr,pattern=""){
var dt=new Date(dateStr);
var y=dt.getFullYear();
var m=dt.getMonth()+1;
var d=dt.getDate();
// return y+'-'+m+'-'+d;
if (pattern.toLowerCase() === 'yyyy-mm-dd'){
return `${y}-${m}-${d}`;
}else{
var hh=dt.getHours();
var mm=dt.getMinutes();
var ss=dt.getSeconds();
return `${y}-${m}-${d}-${hh}:${mm}:${ss}`;
}
});
(2)自定义全局指令
使用Vue.directive()定义全局指令。
其中:参数1 : 指令的名称,注意,在定义的时候,指令的名称前面,不需要加 v- 前缀;但是调用的时候必须加v-前缀
参数2:是一个对象,这个对象身上,有一些指令相关的函数,这些函数可以在特定的阶段,执行相关的函数操作
Vue.directive('focus', {
bind: function (el) { // 每当指令绑定到元素上的时候,会立即执行这个 bind 函数,只执行一次
// 注意: 在每个 函数中,第一个参数,永远是 el ,表示 被绑定了指令的那个元素,这个 el 参数,是一个原生的JS对象
//和样式相关的操作,一般都放在bind函数
},
inserted: function (el) { // inserted 表示元素 插入到DOM中的时候,会执行 inserted 函数【触发1次】
el.focus()
// 和JS行为有关的操作,最好在 inserted 中去执行,放置 JS行为不生效
},
updated: function (el) { // 当VNode更新的时候,会执行 updated, 可能会触发多次
}
})
2. 私有过滤器和私有(局部)指令
私有过滤器定义在Vue实例内部即可。
var vm2 = new Vue({
el: '#app2',
data: {
dt: new Date()
},
methods: {},
filters: { // 定义私有过滤器 过滤器有两个 条件 【过滤器名称 和 处理函数】
// 过滤器调用的时候,采用的是就近原则,如果私有过滤器和全局过滤器名称一致了,这时候 优先调用私有过滤器
dateFormat: function (dateStr, pattern = '') {
// 根据给定的时间字符串,得到特定的时间
var dt = new Date(dateStr)
// yyyy-mm-dd
var y = dt.getFullYear()
var m = (dt.getMonth() + 1).toString().padStart(2, '0')
var d = dt.getDate().toString().padStart(2, '0')
if (pattern.toLowerCase() === 'yyyy-mm-dd') {
return `${y}-${m}-${d}`
} else {
var hh = dt.getHours().toString().padStart(2, '0')
var mm = dt.getMinutes().toString().padStart(2, '0')
var ss = dt.getSeconds().toString().padStart(2, '0')
return `${y}-${m}-${d} ${hh}:${mm}:${ss} ~~~~~~~`
}
}
},
directives: { // 自定义私有指令
'fontweight': { // 设置字体粗细的
bind: function (el, binding) {
el.style.fontWeight = binding.value
}
},
'fontsize': function (el, binding) { // 注意:这个 function 等同于 把 代码写到了 bind 和 update 中去
el.style.fontSize = parseInt(binding.value) + 'px'
}
}
})