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 相关文章推荐
csdn 博客的css样式 v3
Feb 24 Javascript
javascript 函数使用说明
Apr 07 Javascript
用js读、写、删除Cookie代码分享及详细注释说明
Jun 05 Javascript
javascript数据类型示例分享
Jan 19 Javascript
JavaScript获取表单enctype属性的方法
Apr 02 Javascript
JavaScript实现点击单选按钮改变输入框中文本域内容的方法
Aug 12 Javascript
jQuery自定义动画函数实例详解(附demo源码)
Dec 10 Javascript
Input文本框随着输入内容多少自动延伸的实现
Feb 15 Javascript
浅谈angularjs中响应回车事件
Apr 24 Javascript
VueJs 将接口用webpack代理到本地的方法
Nov 27 Javascript
JS实现图片拖拽交换效果
Nov 30 Javascript
React-redux实现小案例(todolist)的过程
Sep 29 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
PHP 命令行工具 shell_exec, exec, passthru, system详细使用介绍
2011/09/11 PHP
input file获得文件根目录简单实现
2013/04/26 PHP
CodeIgniter上传图片成功的全部过程分享
2013/08/12 PHP
PHP登录环节防止sql注入的方法浅析
2014/06/30 PHP
php删除txt文件指定行及按行读取txt文档数据的方法
2017/01/30 PHP
实例介绍PHP删除数组中的重复元素
2019/03/03 PHP
聊聊 PHP 8 新特性 Attributes
2020/08/19 PHP
基于jQuery的输入框无值自动显示指定数据的实现代码
2011/01/24 Javascript
修改jQuery Validation里默认的验证方法
2012/02/14 Javascript
基于jquery的bankInput银行卡账号格式化
2012/08/22 Javascript
JS版的date函数(和PHP的date函数一样)
2014/05/12 Javascript
js实现select跳转功能代码
2014/10/22 Javascript
java中String类型变量的赋值问题介绍
2016/03/23 Javascript
JavaScript中闭包之浅析解读(必看篇)
2016/08/25 Javascript
JS实现本地存储信息的方法(基于localStorage与userData)
2017/02/18 Javascript
Node.js v8.0.0正式发布!看看带来了哪些主要新特性
2017/06/02 Javascript
详解使用element-ui table组件的筛选功能的一个小坑
2018/11/02 Javascript
使用jquery的cookie实现登录页记住用户名和密码的方法
2019/03/13 jQuery
微信小程序template模版的使用方法
2019/04/13 Javascript
小程序封装路由文件和路由方法(5种全解析)
2019/05/26 Javascript
node将geojson转shp返回给前端的实现方法
2019/05/29 Javascript
你了解vue3.0响应式数据怎么实现吗
2019/06/07 Javascript
微信小程序开发技巧汇总
2019/07/15 Javascript
微信小程序new Date()方法失效问题解决方法
2019/07/29 Javascript
vue使用require.context实现动态注册路由
2020/12/25 Vue.js
Python使用scrapy采集数据时为每个请求随机分配user-agent的方法
2015/04/08 Python
Python子类继承父类构造函数详解
2019/02/19 Python
Python如何使用队列方式实现多线程爬虫
2020/05/12 Python
python用opencv 图像傅里叶变换
2021/01/04 Python
美国受欢迎的眼影品牌:BH Cosmetics
2016/10/25 全球购物
幼儿园教师请假制度
2014/01/16 职场文书
大学生学习2014年全国两会心得体会
2014/03/12 职场文书
2014幼儿园教师师德师风演讲稿
2014/09/10 职场文书
考试作弊被抓检讨书
2014/10/02 职场文书
美德少年主要事迹材料
2015/11/04 职场文书
nginx里的rewrite跳转的实现
2021/03/31 Servers