1、自定义指令的作用

  除了核心功能默认内置的指令 (v-model 和 v-show),Vue 也允许注册自定义指令。注意,在 Vue2.0 中,代码复用和抽象的主要形式是组件。然而,有的情况下,你仍然需要对普通 DOM 元素进行底层操作,这时候就会用到自定义指令。

参考文档:https://cn.vuejs.org/v2/guide/custom-directive.html

2、注册自定义指令

(1)注册全局自定义指令

  1. Vue.directive("指令名称", {
  2. inserted: function (el, binding) {
  3. // el 代表使用了此指令的那个 DOM 元素
  4. // binding 可获取使用了此指令的绑定值 等
  5.  
  6. //逻辑代码
  7.  
  8. }
  9. }
  10. );

(2)注册局部指令

  1. directives:{
  2. "指令名称":{
  3. inserted:function (el,binging) {
  4. //逻辑代码
  5. }
  6. }
  7. }

注意:

  • 注册时,指令名称前不要带 v-,因为内部处理会自动加上v-。
  • 指令名称中间不要有大写字母,开头可以出现大写字母

(3)使用自定义指令

  • 引用指令时,指令名前面加上 v-
  • 直接在元素上在使用即可 :v-指令名='表达式'

3、案例演示

  当页面加载时,该元素将获得焦点 (注意:autofocus 在移动版 Safari 上不工作)。事实上,只要你在打开这个页面后还没点击过任何内容,这个输入框就应当还是处于聚焦状态。现在让我们用指令来实现这个功能:

(1)全局指令实现

  1. <div id="app">
  2. 自动获取焦点:<input type="text" v-auto-focus>
  3. </div>
  4.  
  5. <script>
  6. //全局指令
  7. Vue.directive("auto-focus", {
  8. inserted: function (el, binding) {
  9. // el 代表使用了此指令的那个 DOM 元素
  10. // binding 可获取使用了此指令的绑定值 等
  11. el.focus()
  12.  
  13. }
  14. }
  15. );

(2)局部指令实现

  1. <div id="app">
  2. 自动获取焦点:<input type="text" v-focus>
  3. </div>
  4.  
  5. <script>
  6. new Vue({
  7. el: "#app",
  8. data: {},
  9. //只在当前Vue实例中生效
  10. directives:{
  11. "focus":{
  12. inserted:function (el,binging) {
  13. //逻辑代码
  14. el.focus()
  15. }
  16. }
  17. }
  18. })
  19.  
  20. </script>

4、钩子函数

在上面使用了钩子函数inserted,实际上还有其它常用的钩子函数:

  1. bind:只调用一次,指令第一次绑定到元素时调用。在这里可以进行一次性的初始化设置。
  2.  
  3. inserted:被绑定元素插入父节点时调用 (仅保证父节点存在,但不一定已被插入文档中)。
  4.  
  5. update:所在组件的 VNode 更新时调用,但是可能发生在其子 VNode 更新之前。指令的值可能发生了改变,也可能没有。但是你可以通过比较更新前后的值来忽略不必要的模板更新。

常用钩子函数的参数:

  • el:指令所绑定的元素,可以用来直接操作 DOM 。
  • binding:一个对象,包含以下属性:
      name:指令名,不包括 v- 前缀。
      value:指令的绑定值,例如:v-my-directive="1 + 1" 中,绑定值为 2。

实例:

  1. <div id="app">
  2.  
  3. <p v-get-values="msg"></p> //data中声明
  4.  
  5. </div>
  6.  
  7. <script>
  8.  
  9. Vue.directive("get-values", {
  10.  
  11. //样式不需要元素插入到DOM中,类似于link中的css引入一样
  12.  
  13. bind: function (el) {
  14. el.style.color = "green"
  15. },
  16.  
  17. inserted: function (el, binding) {
  18. // el 代表使用了此指令的 DOM 元素
  19. // binding 获取使用了此指令的绑定值
  20. el.innerHTML = binding.value
  21.  
  22. }
  23. });

vue之自定义指令的更多相关文章

  1. 最简单的方式理解Vue的自定义指令与混合

    vue.js 自定义指令 钩子函数:bindinsertedupdatecomponentUpdatedunbind 钩子函数完整实例:html: <div id="hook-argu ...

  2. Vue.js自定义指令的用法与实例

    市面上大多数关于Vue.js自定义指令的文章都在讲语法,很少讲实际的应用场景和用例,以致于即便明白了怎么写,也不知道怎么用.本文不讲语法,就讲自定义指令的用法. 自定义指令是用来操作DOM的.尽管Vu ...

  3. vue 通过自定义指令实现 置顶操作;

    项目需求:要求当前项目每个页面滑到超出一屏的距离时,出现 backTop 按钮,点击则回到最顶端:俗称置顶操作: 因为涉及到的页面较多,每个页面都加肯定显得重复累赘,最终想到了 Vue 的自定义指令  ...

  4. vue怎么自定义指令??

    最近看看vue中自定义指令,感觉vue的指令和angular1的指令相差较大 <script> //指令钩子函数: /* bind 只调用一次,指令第一次绑定到元素的时调用 inserte ...

  5. Vue directive自定义指令+canvas实现H5图片压缩上传-Base64格式

    前言 最近优化项目-手机拍照图片太大,回显速度比较慢,使用了vue的自定义指令实现H5压缩上传base64格式的图片 canvas自定义指令 Vue.directive("canvas&qu ...

  6. Vue.directive 自定义指令

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

  7. vue中自定义指令

    //vue中自定义指令 //使用 Vue.directive(id, [definition]) 定义全局的指令 //参数1:指令的名称.注意,在定义的时候,指令的名称前面,不需要加 v-前缀; 但是 ...

  8. Vue2.0 【第二季】第1节 Vue.directive自定义指令

    目录 Vue2.0 [第二季]第1节 Vue.directive自定义指令 一.什么是全局API? 二. Vue.directive自定义指令 三.自定义指令中传递的三个参数 四.自定义指令的生命周期 ...

  9. Vue 3自定义指令开发

    本文由葡萄城技术团队原创并首发 转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 什么是指令(directive) 在Angular和Vue中都有Direct ...

  10. vue.js自定义指令入门

    Vue.js 允许你注册自定义指令,实质上是让你教 Vue 一些新技巧:怎样将数据的变化映射到 DOM 的行为.你可以使用Vue.directive(id, definition)的方法传入指令id和 ...

随机推荐

  1. Java的部分问题和小结

    2015/9/6 ThreadLocal:该类提供了线程局部变量,这样可以生成对每个线程唯一的局部标识符. 2015/9/18 1.乱码问题:  js:xdata = encodeURI(encode ...

  2. Python之字典推导式

    推导式是个绝妙的东西,列表推导式一出,map.filter等函数黯然失色,自 Python2.7以后的版本,此特性扩展到了字典和集合身上,构建字典对象无需调用 dict 方法. bad numbers ...

  3. Chrome不支持css字体小于12px的解决办法

    我们先来看个效果图(chrome下): 从上面的图可以很明显地看出Chrome下css设置字体大小为12px及以下时,显示的都是一样大小,都是默认12px: 那么网上有一个方法就是给当前样式添加Chr ...

  4. Ubuntu 14.04 Sublime Text3 Java编译运行(最简单的方法)

    Sublime,结果发现只能编译,无法直接运行,于是就在网上搜解决方法,发现大部分方法都是告诉你要进入Java.sublime-packag这个文件,然后再修改JavaC.sublime-build, ...

  5. 负载均衡实现故障vip自动漂移

    环境说明演示vip自动漂移 192.168.237.50 192.168.237.51 vip: 192.168.237.5 keepalived开源软件实现 keepalived可以实现当vip挂的 ...

  6. redis搭建主从

    主从概念 ⼀个master可以拥有多个slave,⼀个slave⼜可以拥有多个slave,如此下去,形成了强⼤的多级服务器集群架构 master用来写数据,slave用来读数据,经统计:网站的读写比率 ...

  7. Qt 【关于跳转页面后当前页面(委托delegate)数据丢失的问题】

    这个是一个很低级的错误,之前po主急着完成任务,也是没注意看,窗口跳窗如下图所示: 这个过程中都是click促发槽然后B*pB,pB->show,同理A*pA,pA->show,这个过程中 ...

  8. 详解 MySQL int 类型的长度值问题

    以下是每个整数类型的存储和范围 (来自 mysql 手册)

  9. 配置 Linux 静态网卡 & 远程连接 MySQL 问题

    1.设置 Linux 为静态网络配置 使用 VMWare 安装好 CentOS 后,将网络适配器设置为 NAT 模式.为了防止 IP 关机重启时候经常变动,需要将网卡信息设置为静态. 修改 /etc/ ...

  10. Delphi 消息函数 SendMessage函数和 PostMessage的区别

    SendMessage函数 将指定的消息发到窗口.它调用特定窗口的窗口处理函数,并且不会立即返回,直到窗口处理函数处理了这个消息. PostMessage函数 将一个消息放入与创建这个窗口的消息队列相 ...