详解Vue.directive 自定义指令


Posted in Javascript onMarch 27, 2019

一、什么是全局API?

全局API并不在构造器里,而是先声明全局变量或者直接在Vue上定义一些新功能,Vue内置了一些全局API,比如我们今天要学习的指令Vue.directive。说的简单些就是,在构造器外部用Vue提供给我们的API函数来定义新的功能。

二、Vue.directive自定义指令

我们在第一季就学习了内部指令,我们也可以定义一些属于自己的指令,比如我们要定义一个v-jspang的指令,作用就是让文字变成绿色。

在自定义指令前我们写一个小功能,在页面上有一个数字为10,数字的下面有一个按钮,我们每点击一次按钮后,数字加1.

三、自定义指令中传递的三个参数

el: 指令所绑定的元素,可以用来直接操作DOM。

binding:  一个对象,包含指令的很多信息。

vnode: Vue编译生成的虚拟节点。

四、自定义指令的生命周期

自定义指令有五个生命周期(也叫钩子函数),分别是 bind,inserted,update,componentUpdated,unbind

  1. bind:只调用一次,指令第一次绑定到元素时调用,用这个钩子函数可以定义一个绑定时执行一次的初始化动作。
  2. inserted:被绑定元素插入父节点时调用(父节点存在即可调用,不必存在于document中)。
  3. update:被绑定于元素所在的模板更新时调用,而无论绑定值是否变化。通过比较更新前后的绑定值,可以忽略不必要的模板更新。
  4. componentUpdated:被绑定元素所在模板完成一次更新周期时调用。
  5. unbind:只调用一次,指令与元素解绑时调用。
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <script type="text/javascript" src="../assets/js/vue.js"></script>
  <title>vue.directive 自定义指令</title>
</head>
<body>
  <h1>vue.directive 自定义指令</h1>
  <hr>
  <div id="app">
    <div v-jspang="color" id="aaa">
      {{num}}
    </div>
    <p>
      <button @click='jia'>加分</button>
    </p>
    <p>
      <button onclick='unbind()'>解绑</button>
    </p>
  </div>
 
  <script type="text/javascript">
 
    function unbind(){
      app.$destroy();
    }
 
    //自定义指令
    Vue.directive('jspang',{
      bind:function(el,binding,vnode){//被绑定
        /**
            var s=JSON.stringify;
            el.innerHTML = 
              'name:'    + s(binding.name) +'<br>' + 
              'value:'    + s(binding.value) +'<br>' + 
              'expression:' + s(binding.expression) +'<br>' ;
        **/
        el.style='color:'+binding.value;
         
 
        console.log('1 - bind');
      },
      inserted:function(){//绑定到节点
        console.log('2 - inserted');
      },
      update:function(){//组件更新
        console.log('3 - update');
      },
      componentUpdated:function(){//组件更新完成
        console.log('4 - componentUpdated');
      },
      unbind:function(){//解绑
        console.log('5 - unbind');
      }
 
    })
 
    var app=new Vue({
      el:'#app',
      data:{
        color:'green',
        num:10
      },
      methods:{
        jia:function(){
          this.num++;
        }
      }
    })
  </script>
</body>
</html>
bind:function(){//被绑定
   console.log('1 - bind');
},
inserted:function(){//绑定到节点
   console.log('2 - inserted');
},
update:function(){//组件更新
   console.log('3 - update');
},
componentUpdated:function(){//组件更新完成
   console.log('4 - componentUpdated');
},
unbind:function(){//解绑
   console.log('1 - bind');
}

以上所述是小编给大家介绍的Vue.directive 自定义指令详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
JS 控制非法字符的输入代码
Dec 04 Javascript
Java/JS获取flash高宽的具体方法
Dec 27 Javascript
Javascript核心读书有感之语句
Feb 11 Javascript
js全选实现和判断是否有复选框选中的方法
Feb 17 Javascript
jQuery+HTML5加入购物车代码分享
Oct 29 Javascript
jQuery on()绑定动态元素出现的问题小结
Feb 19 Javascript
bootstrap按钮插件(Button)使用方法解析
Jan 13 Javascript
AngularJs导出数据到Excel的示例代码
Aug 11 Javascript
关于vue的语法规则检测报错问题的解决
May 21 Javascript
如何使用vuex实现兄弟组件通信
Nov 02 Javascript
JavaScript解析JSON数据示例
Jul 16 Javascript
微信小程序wxs实现吸顶效果
Jan 08 Javascript
vue 列表页跳转详情页获取id以及详情页通过id获取数据
Mar 27 #Javascript
js取0-9随机取4个数不重复的数字代码实例
Mar 27 #Javascript
vue 详情跳转至列表页实现列表页缓存
Mar 27 #Javascript
vue中多个倒计时实现代码实例
Mar 27 #Javascript
JavaScript偏函数与柯里化实例详解
Mar 27 #Javascript
vue实现鼠标移入移出事件代码实例
Mar 27 #Javascript
JavaScript惰性载入函数实例分析
Mar 27 #Javascript
You might like
Protoss兵种对照表
2020/03/14 星际争霸
PHP 组件化编程技巧
2009/06/06 PHP
PHP操作XML作为数据库的类
2010/12/19 PHP
那些年一起学习的PHP(一)
2012/03/21 PHP
wamp下修改mysql访问密码的解决方法
2013/05/07 PHP
PHP根据IP判断地区名信息的示例代码
2014/03/03 PHP
php中静态类与静态变量用法的区别分析
2015/01/15 PHP
PHP的介绍以及优势详细分析
2019/09/05 PHP
PHP设计模式(八)装饰器模式Decorator实例详解【结构型】
2020/05/02 PHP
jQuery下实现等待指定元素加载完毕(可改成纯js版)
2013/07/11 Javascript
表单元素与非表单元素刷新区别详细解析
2013/11/06 Javascript
JS实现的左侧竖向滑动菜单效果代码
2015/10/19 Javascript
Jquery获取第一个子元素简单实例
2016/06/02 Javascript
模板视图和AngularJS之间冲突的解决方法
2016/11/22 Javascript
JavaScript获取select中text值的方法
2017/02/13 Javascript
详解webpack异步加载业务模块
2017/06/23 Javascript
微信JSAPI Ticket接口签名详解
2020/06/28 Javascript
利用jquery和BootStrap实现动态滚动条效果
2018/12/03 jQuery
nodemon实现Typescript项目热更新的示例代码
2019/11/19 Javascript
Vue+Element实现网页版个人简历系统(推荐)
2019/12/31 Javascript
vue调用微信JSDK 扫一扫,相册等需要注意的事项
2021/01/03 Vue.js
Python实现全角半角字符互转的方法
2016/11/28 Python
使用python编写简单的小程序编译成exe跑在win10上
2018/01/15 Python
Python读取properties配置文件操作示例
2018/03/29 Python
Django1.11配合uni-app发起微信支付的实现
2019/10/12 Python
Python: 传递列表副本方式
2019/12/19 Python
python GUI库图形界面开发之PyQt5滑块条控件QSlider详细使用方法与实例
2020/02/28 Python
Python 打印自己设计的字体的实例讲解
2021/01/04 Python
修复iPhone的safari浏览器上submit按钮圆角bug
2012/12/24 HTML / CSS
Intersport西班牙:在线体育商店
2019/11/06 全球购物
中海讯通笔试题
2015/09/15 面试题
单位租房协议书样本
2014/10/30 职场文书
领导欢迎词致辞
2015/01/23 职场文书
2015年英语教师工作总结
2015/05/20 职场文书
详解Flask开发技巧之异常处理
2021/06/15 Python
一次项目中Thinkphp绕过禁用函数的实战记录
2021/11/17 PHP