Vue.js自定义指令学习使用详解


Posted in Javascript onOctober 19, 2019

自定义指令

自定义指令的注册方法和组件很像,也分全局注册和局部注册,比如注册一个v-focus指令用于在<input>、<textarea>元素初始化时自动获得焦点,共有两种写法:

//全局注册
Vue.directive('focus',{
 //指令选项
});


//局部注册
var app = new Vue({
 el: '#app',
 directive: {
 focus: {
 //指令选项
 }
 }
});

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

自定义指令的各个选项如下:

  • bind: 只调用一次,指令第一次绑定到元素时调用,用这个钩子函数可以定义一个在绑定时执行一次的初始化动作。
  • inserted: 被绑定元素插入父节点时调用(父节点存在即可调用,不必在于document中)。
  • update: 被绑定元素所在的模板更新时调用,而不论绑定值是否变化。通过比较更新前后的绑定值,可以忽略不必要的模板更新。
  • componentUpdated: 被绑定元素所在模板完成一次更新周期时调用。
  • unbind: 只调用一次,指令与元素解绑时调用。

可以根据需求在不同的钩子函数内完成逻辑代码,例如上面的v-focus,我们希望在元素插入父节点时就调用,那用到的最好是inserted。

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <meta name="viewport" content="width=device-width, initial-scale=1.0">
 <meta http-equiv="X-UA-Compatible" content="ie=edge">
 <script src="https://unpkg.com/vue/dist/vue.js"></script>
 <title>自定义指令</title>
</head>
<body>
 <div id="app">
 <input type="text" v-focus>
 </div>
 <script>
 Vue.directive('focus',{
  inserted: function (el) {
  //聚焦元素
  el.focus();
  }
 });

 var app = new Vue({
  el: '#app'
 });
 </script>
</body>
</html>

Vue.js自定义指令学习使用详解

每个钩子函数都有几个参数可用,具体如下:

  • el: 指令所绑定的元素,可以用来直接操作DOM
  • binding: 一个对象,包含以下属性:

    name:指令名,不包括v-前缀
    valule:指令的绑定值,例如v-my-directive=“1 + 1”,value的值是2
    oldValue:指令绑定的前一个值,仅在update和componentUpdated钩子中可用。无论值是否改变都可用
    expression:绑定值的字符串形式。例如v-my-directive=“1 + 1”,expression的值是”1 + 1“
    arg:传给指令的参数。例如v-my-directive:foo,arg的值是foo
    modifiers:一个包含修饰符的对象。例如v-my-directive.foo.bar,修饰符对象modifiers的值是{ foo:true, bar:true}

  • vnode: Vue编译生成的虚拟节点。
  • oldVnode: 上一个虚拟节点仅在update和componentUpdated钩子中可用。

示例:

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <meta name="viewport" content="width=device-width, initial-scale=1.0">
 <meta http-equiv="X-UA-Compatible" content="ie=edge">
 <script src="https://unpkg.com/vue/dist/vue.js"></script>
 <title>自定义指令</title>
</head>
<body>
 <div id="app">
 <div v-test:msg.a.b="message"></div>
 </div>
 <script>
 Vue.directive('test',{
  bind: function (el, binding, vnode) {
  var keys = [];
  for(var i in vnode){
   keys.push(i);
  }
  el.innerHTML = 
   'name:' + binding.name + '<br/>' +
   'value:' + binding.value + '<br/>' +
   'expression:' + binding.expression + '<br/>' +
   'argument:' + binding.arg + '<br/>' + 
   'modifiers:' + JSON.stringify(binding.modifiers) + '<br/>' + 
   'vnode keys' + keys.join(',');
  }
 });

 var app = new Vue({
  el: '#app',
  data: {
  message: 'some text'
  }
 });
 </script>
</body>
</html>

Vue.js自定义指令学习使用详解

更多教程点击《Vue.js前端组件学习教程》,欢迎大家学习阅读。

关于vue.js组件的教程,请大家点击专题vue.js组件学习教程进行学习。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jquery ajax 检测用户注册时用户名是否存在
Nov 03 Javascript
JQery 渐变图片导航效果代码 漂亮
Jan 01 Javascript
非html5实现js版弹球游戏示例代码
Sep 22 Javascript
JS对象与json字符串格式转换实例
Oct 28 Javascript
jquery实现美观的导航菜单鼠标提示特效代码
Sep 06 Javascript
JavaScript是如何实现继承的(六种方式)
Mar 31 Javascript
Vue.js中轻松解决v-for执行出错的三个方案
Jun 09 Javascript
View.post() 不靠谱的地方你知道多少
Aug 29 Javascript
vue中倒计时组件的实例代码
Jul 06 Javascript
vue.js+element-ui动态配置菜单的实例
Sep 07 Javascript
Vue封装全局过滤器Filters的步骤
Sep 16 Javascript
Vue+axios封装请求实现前后端分离
Oct 23 Javascript
Vue.js标签页组件使用方法详解
Oct 19 #Javascript
基于JavaScript获取base64图片大小
Oct 18 #Javascript
react MPA 多页配置详解
Oct 18 #Javascript
vue滚动插件better-scroll使用详解
Oct 18 #Javascript
VUE实现密码验证与提示功能
Oct 18 #Javascript
VUE实现图片验证码功能
Nov 18 #Javascript
countUp.js实现数字滚动效果
Oct 18 #Javascript
You might like
让你同时上传 1000 个文件 (一)
2006/10/09 PHP
php生成局部唯一识别码LUID的代码
2012/10/06 PHP
PHP执行Curl时报错提示CURL ERROR: Recv failure: Connection reset by peer的解决方法
2014/06/26 PHP
php多个文件及图片上传实例详解
2014/11/10 PHP
PHP实现微信支付(jsapi支付)流程步骤详解
2018/03/15 PHP
JavaScript的类型转换(字符转数字 数字转字符)
2010/08/30 Javascript
jQuery的控件及事件(输入控件及回车事件)使用示例
2013/07/25 Javascript
jquery 删除cookie失效的解决方法
2013/11/12 Javascript
JavaScript类属性的访问方式详解
2014/02/11 Javascript
js读取cookie方法总结
2014/10/31 Javascript
Windows系统中安装nodejs图文教程
2015/02/28 NodeJs
JavaScript对象学习小结
2015/09/02 Javascript
利用jQuery实现漂亮的圆形进度条倒计时插件
2015/09/30 Javascript
jQuery CSS3相结合实现时钟插件
2016/01/08 Javascript
js获取隐藏元素的宽高
2017/02/24 Javascript
Vuejs 组件——props数据传递的实例代码
2017/03/07 Javascript
详解Node.js实现301、302重定向服务
2017/04/07 Javascript
node.js中axios使用心得总结
2017/11/29 Javascript
javascript自定义加载loading效果
2020/09/15 Javascript
使用vue编写h5公众号跳转小程序的实现代码
2020/11/27 Vue.js
Python卸载模块的方法汇总
2016/06/07 Python
Python实现屏幕截图的两种方式
2018/02/05 Python
python微信跳一跳系列之棋子定位像素遍历
2018/02/26 Python
Python txt文件加入字典并查询的方法
2019/01/15 Python
Python多线程原理与用法实例剖析
2019/01/22 Python
pycharm重命名文件的方法步骤
2019/07/29 Python
Python实现爬取并分析电商评论
2020/06/19 Python
新西兰航空中国官网:Air New Zealand China
2018/07/24 全球购物
哈萨克斯坦移动和数字技术在线商店:SatelOnline.kz
2020/09/04 全球购物
护士试用期自我鉴定
2014/02/08 职场文书
精神文明单位申报材料
2014/05/02 职场文书
出生公证书
2015/01/23 职场文书
2015最新学生自我评价范文
2015/03/03 职场文书
清明扫墓感想
2015/08/11 职场文书
素质教育培训心得体会
2016/01/19 职场文书
Docker下安装Oracle19c
2022/04/13 Servers