Vue自定义过滤器、自定义指令

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'
        }
      }
    })


 

你可能感兴趣的:(VUE,JavaScript)