Vue学习系列 -- 自定义指令

Posted 躬匠

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Vue学习系列 -- 自定义指令相关的知识,希望对你有一定的参考价值。

前面的章节我们先后学习了v-on、v-bind、v-model、v-link等内置指令,今天我们就来学习一下如何创建自定义指令。

自定义指令也是先注册后使用,其注册和组件的注册很类似,也分为全局注册和局部注册。只是注册组件时是使用的component关键字,而注册指令时要使用directive关键字。

全局注册

Vue.directive('focus', 
        //指令内容
    
);

局部注册

 new Vue(
   el : "#app1", //指定绑定的DOM元素
   directives :
       //指令内容
   
 )

OK,说过了指令的大致内容,具体指令的内容是什么样呢?

其实,自定义指令的选项是由几个钩子函数组成的,每个都是可选的。

  • bind:只调用一次,指令第一次绑定到元素时调用,用这个钩子函数可以定义一个在绑定时只执行一次的初始化操作;
  • insterted:被绑定的元素在插入父节点时调用
  • update:被绑定元素所在的模板更新时调用,而不论绑定值是否变化。
  • unbind:只调用一次,指令与元素解绑时调用;

上面的内容可能太理论,下面我们还是采用一个小的demo来学习一下。

<!DOCTYPE html>
<html>
<head>
 <meta charset="utf-8">
 <title>Learning Vue.js</title>
</head>

<body>
<div id="app1">
 <input type="text" name="username" v-focus:args.a.b="message" v-bindd></input>
</div>
</body>

<!--这里是以CDN引入的方式加载的vue.js-->
<script type="text/javascript" src="https://cdn.staticfile.org/vue/2.2.2/vue.min.js"></script>
<script>
    new Vue(
    el : "#app1", //指定绑定的DOM元素
    directives :
        bindd : 
            bind : function () 
                alert('this is bind function');
            ,
        ,
        focus: 
            inserted:  function (el,binding,node) 
                console.log(binding);
                el.focus();
            
        
    ,
    data : 
        message : "foucs value"
    
 )

</script>
</html>

上面的代码演示了在输入框bind和inserted的时候触发绑定的事件:页面会先弹出一个框,之后input框获得焦点;

上面的demo比较简单,其实每个钩子函数都有几个参数可用,比如我们上面用到的el。其他参数以及含义如下

  • el:指令所绑定的元素,可以用来直接操作DOM
  • binding:具体的对象
  • vnode:编译生成的虚拟节点

binding对象又有一下属性:

  • name:去除v-的指令名称
  • value:指令绑定的值,如v-focus="name",则value的值为name
  • args:传递给指令的参数,如v-focus:timeout,则args的值为timeout

通过上面的console.log日志打印出的binding对象信息如下:

以上是关于Vue学习系列 -- 自定义指令的主要内容,如果未能解决你的问题,请参考以下文章

vue--钩子函数1

vue自定义指令

vue自定义指令钩子函数

vue_cli自定义指令个人总结--完整代码

Vue 自定义指令 directive

Vue 自定义指令 directive