Vue 2.0 自定义指令

2018-05-08  本文已影响0人  Pretend_ebb0

自定义指令

自定义指令基本就是用来操作DOM的,虽然官方推荐数据驱动视图,有时候还是需要自定义指令来操作DOM,指令可复用.

自定义指令,可以全局和局部注册,

1. 全局自定义指令

全局自定义指令需要使用 全局 API Vue.directive( id, [definition] ) definition 可以是 函数和 json对象

自定义指令有5个钩子函数
Vue.directive('hello',{
    bind(el,binding){
        alert('只调用一次,指令第一次绑定到元素时调用,可执行初始化操作')
    },
    inserted(){
        alert('被绑定元素插入DOM时调用')
    },
    update(){
        alert('被绑定元素所在模板更新时调用')
    },
    componentUpdated(){
        alert('被绑定元素所在模板更新完成后调用')
    },
    unbind(){
        alert('只调用一次指令与元素解绑时调用')
    }
})
钩子函数参数

注意: val 指令绑定值 只能是 vue实例下 data对象的数据 arg 参数是自己随便定义的

查看钩子函数和参数演示

自定义指令语法简写

以上自定义指令语法 有些繁琐 vue.directive() 允许你传入一个函数 相当于 bind 和 update

// 注册 (指令函数)
Vue.directive('my-directive', function () {
  // 这里将会被 `bind` 和 `update` 调用
})

实例

  1. 使用自定义指令做一个输入框自定聚焦
<div id="app">
  <input v-focus type="" name="" id="" value="" />
</div>
Vue.directive('focus',{
//被绑定元素插入DOM时触发
  inserted:function(el){
    el.focus()
  }
})

new Vue({
  el:'#app',
})

查看实例演示

  1. 使用自定义指令做元素拖拽
<div id="app">
    <div class="box bgred lt0" v-drag></div>
    <div class="box bgblue rt0" v-drag></div>
</div>
Vue.directive('drag',function(el){
    el.onmousedown=function(e){
        var w = e.clientX - el.offsetLeft
        var h = e.clientY - el.offsetTop
        document.onmousemove=function(e){
            var x = e.clientX-w;
            var y = e.clientY-h;
            el.style.left=x+"px"
            el.style.top=y+'px'
        };
        document.onmouseup=function(){
            document.onmousemove=null;
            document.onmouseup =null
        }
    }
})
var vm = new Vue({
    el:'#app',
})

拖拽指令演示

上一篇 下一篇

猜你喜欢

热点阅读