vue 自定义指令-LMLPHP

一、什么是指令

在vue中提供了一套为数据驱动视图更为方便的操作,这些操作被称为指令系统,我们看到的v-开头的行内属性,都是指令,不同的指令可以完成或实现不同的功能,除了核心功能默认内置的指令 (v-model 和 v-show),Vue 也允许注册自定义指令。

常见的vue内置指令有:v-if,v-show,v-for,v-bind,v-model 等。

二、如何实现一个自定义指定

Vue的指令以v-开头,作用在HTML元素上,将指令绑定在元素上,给绑定的元素添加一些特殊行为。以 v-if 为例,其中,v- 是Vue的标识,if是指令 ID。

Vue自定义指令有全局注册和局部注册两种方式:全局指令注册和局部指令注册。

1.全局指令注册

// 注册一个全局自定义指令 `v-focus`
Vue.directive('focus', {
  // 当被绑定的元素插入到 DOM 中时……
  inserted: function (el) {
    // 聚焦元素
    el.focus()
  }
})
 
 
<!-- 当页面加载时,该元素将获得焦点 -->
<input v-focus />

2.局部指令注册

// 注册一个局部自定义指令 `v-focus`
directives: {
  focus: {
    // 指令的定义
    inserted: function (el) {
      el.focus()
    }
  }
}
 
<!-- 当页面加载时,该元素将获得焦点 -->
<input v-focus />

3.自定义指令钩子函数如下:

4.钩子函数示例:

Vue.directive('my-directive', {
  bind: function(el, binding) {
    // 指令绑定时执行的操作
  },
  inserted: function(el, binding) {
    // 元素插入父节点时执行的操作
  },
  update: function(el, binding) {
    // 指令所在模板更新时执行的操作
  },
  componentUpdated: function(el, binding) {
    // 模板完成一次更新周期时执行的操作
  },
  unbind: function(el, binding) {
    // 指令与元素解绑时执行的操作
  }
})

三、应用场景

四、演示

1.通过指令,指定输入框文字颜色

<! -- 通过指令,指定输入框文字颜色-->
<input v-color="'red'">
 
Vue.directive('color', {
  bind: function (el,bind) {
    // 设置文字颜色
    el.style.color = bind.value
  }
})

vue 自定义指令-LMLPHP

2.通过指令,对手机号进行脱敏

<!-- 通过指令,设置手机号脱敏 -->
<div v-mask-phone="'13612345678'"></div>
 
 
// 在Vue实例中注册自定义指令,并在钩子函数中对手机号进行脱敏处理
Vue.directive('mask-phone', {
  bind: function (el, binding) {
    // 获取手机号
    const phoneNumber = binding.value
 
    // 脱敏处理
    const maskedPhoneNumber = phoneNumber.replace(/(\d{3})\d{4}(\d{4})/, '$1****$2')
 
    // 更新元素的内容
    el.textContent = '手机号码:' + maskedPhoneNumber
  }
})

vue 自定义指令-LMLPHP

07-03 19:30