VueJs

Vuejs全家桶系列(六)---自定义指令

字号+ 来源:网络收集 编辑整理: 飞燕前端网 2017-12-20 15:04:07

简介Vue.js 允许你注册自定义指令,实质上是让你教 Vue 一些新技巧:怎样将数据的变化映射到 DOM 的行为。你可以使用Vue.directive(id, definition)的方法传入指令id...

简介

Vue.js 允许你注册自定义指令,实质上是让你教 Vue 一些新技巧:怎样将数据的变化映射到 DOM 的行为。你可以使用Vue.directive(id, definition)的方法传入指令id和定义对象来注册一个全局自定义指令。定义对象需要提供一些钩子函数(全部可选):

自定义指令是用来操作DOM的。尽管Vue推崇数据驱动视图的理念,但并非所有情况都适合数据驱动。自定义指令就是一种有效的补充和扩展,不仅可用于定义任何的DOM操作,并且是可复用的。

格式

第一种写法(可选择下面的多个方法)

Vue.directive('hello',{
    bind(){
        alert('指令第一次绑定到元素上时调用,只调用一次,可执行初始化操作');
    },
    inserted(){
        alert('被绑定元素插入到DOM中时调用');
    },
    update(){
        alert('被绑定元素所在模板更新时调用');
    },
    componentUpdated(){
        alert('被绑定元素所在模板完成一次更新周期时调用');
    },
    unbind(){
        alert('指令与元素解绑时调用,只调用一次');
    }});1234567891011121314151617

第二种写法(只调用bind和update)

//传入一个简单的函数,bind和update时调用Vue.directive('wbs',function(){
    alert('wbs17022');
});1234

一旦注册好自定义指令,你就可以在 Vue.js 模板中像这样来使用它(需要添加 Vue.js 的指令前缀,默认为 v-):

<div v-my-directive="someValue"></div>1

常用的方法

  • bind

    仅调用一次,当指令第一次绑定元素的时候。
    • 1

    • 2

  • update

    第一次是紧跟在 bind 之后调用,获得的参数是绑定的初始值;以后每当绑定的值发生变化就会被调用,获得新值与旧值两个参数。
    • 1

    • 2

  • unbind

    仅调用一次,当指令解绑元素的时候。
    • 1

    • 2

常用的属性

上下文环境。指令对象上暴露了一些有用的公开属性:

el: 指令绑定的元素
vm: 拥有该指令的上下文 ViewModel
expression: 指令的表达式,不包括参数和过滤器
arg: 指令的参数
raw: 未被解析的原始表达式
name: 不带前缀的指令名1234567

应用

实现drag指令

功能:使dom节点可以拖拽

Vue.directive('drag',function(el){
    el.onmousedown=function(e){        //获取鼠标点击处分别与div左边和上边的距离:鼠标位置-div位置        var disX=e.clientX-el.offsetLeft;        var disY=e.clientY-el.offsetTop;        // console.log(disX,disY);        //包含在onmousedown里面,表示点击后才移动,为防止鼠标移出div,使用document.onmousemove
        document.onmousemove=function(e){            //获取移动后div的位置:鼠标位置-disX/disY            var l=e.clientX-disX;            var t=e.clientY-disY;
            el.style.left=l+'px';
            el.style.top=t+'px';
        }        //停止移动
        document.onmouseup=function(e){
            document.onmousemove=null;
            document.onmouseup=null;
        }
    }
});1234567891011121314151617181920212223

1.飞燕前端网遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.飞燕前端网的原创文章,请转载时务必注明文章作者和"来源:飞燕前端网",不尊重原创的行为飞燕前端网或将追究责任。

相关文章
网友点评