vue2.0自定义指令示例代码详解


Posted in Javascript onApril 25, 2019

1、什么是指令?

指令通常以"v-"作为前缀, 以方便Vue知道你在使用一种特殊的标记。

除了 Vue 核心携带着的一些默认指令(v-model 和 v-show)之外,

Vue 还允许你注册自己的自定义指令。某些情况下,还是需要对普通元素进行一些底层 DOM 访问,

这也是自定义指令仍然有其使用场景之处。

2、全局指令:

当页面加载时,元素将获取焦点,事实上,在访问页面时,如果你还没有点击任何地方,上面的输入框现在应该处于获取焦点的状态。现在让我们构建指令以完成此效果:

<template>
<div class="parent">
 <input v-focus>
</div>
</template>
import Vue from 'vue'
 import cnChildren from './children'
 // 注册一个名为 `v-focus` 的全局自定义指令
 Vue.directive('focus', {
  // 当绑定的元素插入到 DOM 时调用此函数……
  inserted: function (el) {
   // 元素调用 focus 获取焦点
   el.focus()
  }
 });

如果你想要注册一个局部指令,也可以通过设置组件的 directives 选项:

directives: {
 focus: {
  // 指令定义对象
  inserted: function (el) {
   el.focus()
  }
 }
}

我们有几个可用的钩子:

bind:在指令第一次绑定到元素时调用,只会调用一次。可以在此钩子函数中,执行一次性的初始化设置。
inserted:在已绑定的元素插入到父节点时调用(只能保证父节点存在,不一定存在于 document 中)。
update:在包含指令的组件的 VNode 更新后调用,但可能之前其子组件已更新。指令的值可能更新或者还没更新,然而可以通过比较绑定的当前值和旧值,来跳过不必要的更新(参考下面的钩子函数)。
componentUpdated:在包含指令的组件的 VNode 更新后调用,并且其子组件的 VNode 已更新。
unbind:在指令从元素上解除绑定时调用,只会调用一次。
每个钩子可以选择一些参数。

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

binding:一个对象,包含以下属性:

1、name:指令的名称,不包括 v- 前缀。
  2、value:向指令传入的值。例如,在 v-my-directive="1 + 1" 中,传入的值是 2。
  3、oldValue:之前的值,只在 update 和 componentUpdated 钩子函数中可用。无论值是否发生变化,都可以使用。
  4、expression:指令绑定的表达式(expression),以字符串格式。例如,在 v-my-directive="1 + 1" 中,表达式是 "1 + 1"。
  5、arg:向指令传入的参数,如果有的话。例如,在 v-my-directive:foo 中,参数是 "foo"。
  6、modifiers:一个对象,包含修饰符,如果有的话。例如,在 v-my-directive.foo.bar 中,修饰符是 { foo: true, bar: true }。
vnode:由 Vue 编译器(Vue's compiler)生成的虚拟 Node 节点(virtual node)。更多细节请查看
VNode API。

除了 el 之外的其他参数,都应该是只读的,并且永远不要去修改它们。

3、自定义指令示例

如果指令需要多个值,你还可以向指令传入 JavaScript 对象字面量(object literal)。记住,指令能够接收所有有效的 JavaScript 表达式。

<div v-demo="{ color: 'white', text: 'hello!' }"></div>
Vue.directive('demo', function (el, binding) {
 console.log(binding.value.color) // => "white"
 console.log(binding.value.text) // => "hello!"
})

总结

以上所述是小编给大家介绍的vue2.0自定义指令示例代码详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Javascript 相关文章推荐
ie浏览器使用js导出网页到excel并打印
Mar 11 Javascript
jquery实现类似EasyUI的页面布局可改变左右的宽度
Sep 12 Javascript
javascript中实现兼容JAVA的hashCode算法代码分享
Aug 11 Javascript
JS实现在页面随时自定义背景颜色的方法
Feb 27 Javascript
使用javascript将时间转换成今天,昨天,前天等格式
Jun 25 Javascript
javascript实现鼠标移到Image上方时显示文字效果的方法
Aug 07 Javascript
JavaScript实现给按钮加上双重动作的方法
Aug 14 Javascript
BootStrap和jQuery相结合实现可编辑表格
Apr 21 Javascript
JS跨域交互(jQuery+php)之jsonp使用心得
Jul 01 Javascript
Vue.js实战之Vuex的入门教程
Apr 01 Javascript
微信小程序WebSocket实现聊天对话功能
Jul 06 Javascript
React+Antd+Redux实现待办事件的方法
Mar 14 Javascript
Vue开发之封装分页组件与使用示例
Apr 25 #Javascript
Vue注册组件命名时不能用大写的原因浅析
Apr 25 #Javascript
从零到一详聊创建Vue工程及遇到的常见问题
Apr 25 #Javascript
详解vue项目中调用百度地图API使用方法
Apr 25 #Javascript
Vue开发之watch监听数组、对象、变量操作分析
Apr 25 #Javascript
详解JS实现简单的时分秒倒计时代码
Apr 25 #Javascript
node.js ws模块搭建websocket服务端的方法示例
Apr 25 #Javascript
You might like
浅析linux下apache服务器的配置和管理
2013/08/10 PHP
YII使用url组件美化管理的方法
2015/12/28 PHP
PHP爬虫之百万级别知乎用户数据爬取与分析
2016/01/22 PHP
golang、python、php、c++、c、java、Nodejs性能对比
2017/03/12 NodeJs
QUnit jQuery的TDD框架
2010/11/04 Javascript
用JQuery在网页中实现分隔条功能的代码
2012/08/09 Javascript
JavaScript实现表格排序方法
2013/06/14 Javascript
解析js如何获取当前url中的参数值并复制给input
2013/06/23 Javascript
JavaScript知识点整理
2015/12/09 Javascript
jQuery图片拖动组件Dropzone用法示例
2017/01/17 Javascript
JavaScript中从setTimeout与setInterval到AJAX异步
2017/02/13 Javascript
原生JS改变透明度实现轮播效果
2017/03/24 Javascript
vue实现tab切换外加样式切换方法
2018/03/16 Javascript
详解Vue.js v-for不支持IE9的解决方法
2018/12/29 Javascript
详解React服务端渲染从入门到精通
2019/03/28 Javascript
基于Vue全局组件与局部组件的区别说明
2020/08/11 Javascript
[33:19]完美世界DOTA2联赛PWL S2 PXG vs InkIce 第一场 11.26
2020/11/30 DOTA
Python fileinput模块使用实例
2015/05/28 Python
python 网络爬虫初级实现代码
2016/02/27 Python
Python中使用platform模块获取系统信息的用法教程
2016/07/08 Python
Python用于学习重要算法的模块pygorithm实例浅析
2018/08/16 Python
Python使用combinations实现排列组合的方法
2018/11/13 Python
pyinstaller打包多个py文件和去除cmd黑框的方法
2019/06/21 Python
如何实现在jupyter notebook中播放视频(不停地展示图片)
2020/04/23 Python
python绘制高斯曲线
2021/02/19 Python
Puritan’s Pride(普丽普莱)官方网站:美国最大最全的保健品公司之一
2016/10/23 全球购物
泰国演唱会订票网站:StubHub泰国
2018/02/26 全球购物
联想香港官方网站及网店:Lenovo香港
2018/04/13 全球购物
竞选生活委员演讲稿
2014/04/28 职场文书
个性车贴标语
2014/06/24 职场文书
主要领导对照检查材料
2014/08/26 职场文书
党员干部反四风对照检查材料思想汇报
2014/09/14 职场文书
2014最新毕业证代领委托书
2014/09/26 职场文书
金砖之国观后感
2015/06/11 职场文书
《你在为谁工作》心得体会(共8篇)
2016/01/20 职场文书
详解JAVA的控制语句
2021/11/11 Java/Android