vue自定义指令
  • 局部指令:​​directives​
  • 全局指令:​​Vue.directive()​

局部指令

<!-- 准备好一个容器-->
<div id="root">
<h2>当前的n值是:<span v-text="n"></span> </h2>
<h2>放大10倍后的n值是:<span v-big="n"></span> </h2>
<button @click="n++">点我n+1</button>
<hr/>
<input type="text" v-fbind:value="n">
</div>

<script type="text/javascript">
Vue.config.productionTip = false

new Vue({
el:'#root',
data:{
n:1
},
directives:{
//。
/* 'big-number'(element,binding){
// console.log('big')
element.innerText = binding.value * 10
}, */
//方式一:函数形式(简写)
big(element,binding){
console.log('big',this) //注意此处的this是window
// console.log('big')
element.innerText = binding.value * 10
},
fbind:{
//指令与元素成功绑定时(一上来)
bind(element,binding){
element.value = binding.value
},
//指令所在元素被插入页面时
inserted(element,binding){
element.focus()
},
//指令所在的模板被重新解析时
update(element,binding){
element.value = binding.value
}
}
}
})
</script>


全局指令

  //定义全局指令
Vue.directive('fbind',{
//指令与元素成功绑定时(一上来)
bind(element,binding){
element.value = binding.value
},
//指令所在元素被插入页面时
inserted(element,binding){
element.focus()
},
//指令所在的模板被重新解析时
update(element,binding){
element.value = binding.value
}
})


注意

  • ​directives​​中的this是windows对象
  • 若自定义名有多个单词,函数形式的函数名要加引号​​''​​,在模板中使用时用驼峰命名

函数形式何时会被调用?

  1. 指令与元素成功绑定时(一上来)
  2. 指令所在的模板被重新解析时

对象形式何时会被调用

  1. 指令与元素成功绑定时(一上来)
  2. 指令所在的模板被重新解析时
  3. 指令所在元素被插入页面时