Skip to content

自定义指令 directives

bind inserted update

自定义指令可以简写成函数形式,完整形式要写成对象(可用于权限控制)

自定义指令允许开发者封装一段操作 DOM 的逻辑,以便在模板中简洁地复用这些逻辑

  • 第一个形参是真实的 DOM 元素 <span></span>

  • 第二个形参是绑定的元素对象,我们需要用到其 value 值 binding.value = n

  • 定义一个 v-big 指令,和 v-text 功能类似,但会把绑定的数值放大 10 倍

  • 定义一个 v-fbind 指令,和 v-bind 功能类似,但可以让其所绑定的 input 元素默认获取焦点

  • 如果想在不同的时机调用不同的函数,就要写成对象式

vue
<h2> 放大10倍后的 n 值是:<span v-big="n"></span> </h2>
<input type="text" v-fbind:value="n">

<script>
  // 定义全局指令(对象式)
  Vue.directive('fbind', {
    bind(element, binding){  // 指令与元素成功绑定时(一上来)被调用
      element.value = binding.value
    },
    inserted(element, binding){  // 指令所在元素被插入页面时被调用
      element.focus()
    },
    update(element, binding){  // 指令所在的模板被重新解析时被调用
      element.value = binding.value
    }
  })
  new Vue({
    // 定义局部指令(函数式简写)
    directives: {
    	big(element, binding) { // 第一个形参:真实 DOM 元素;第二个形参:绑定元素对象
      	element.innerText = binding.value * 10  // 原生 DOM 操作
    	},
  	}
  })
</script>