我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Vue自定义指令深入探讨实现

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Vue自定义指令深入探讨实现

指令

想要了解自定义指令,那肯定得先明白什么是指令。

指令的本质:语法糖,标志位。在编译阶段 render 函数里,会把指令编译成 JavaScript 代码。

常见的Vue内置指令有:

  • v-on 即 @。v-on:click=”function“, 缩写为@click=”function“
  • v-if
  • v-for
  • v-html
  • ……

所以指令就是跟我们的元素标签绑定在一起的某些事件,当我们dom组件在一定条件下就会触发相对应的指令。

自定义指令

先看看Vue官方的说法:

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

指令的自定义即我们按照Vue制定的规则去编写一套可以对dom进行操作的功能函数,然后就能与其他Vue的内置指令一样具有一定的功能效果。指令相当于简化了我们对dom的操作,可以快速进行dom的事件处理,当然我们应该尽量减少使用一些容易消耗浏览器资源的指令。

关于注册自定义指令

全局注册

// 注册一个全局自定义指令 `v-focus`
Vue.directive('focus', {
  // 当被绑定的元素插入到 DOM 中时……
  inserted: function (el) {
    // 聚焦元素
    el.focus()
  }
})

局部注册

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

自定义指令的钩子函数

bind:只调用一次,指令第一次绑定到元素时调用。在这里可以进行一次性的初始化设置。

inserted:被绑定元素插入父节点时调用 (仅保证父节点存在,但不一定已被插入文档中)。

update:所在组件的 VNode 更新时调用,但是可能发生在其子 VNode 更新之前。指令的值可能发生了改变,也可能没有。但是你可以通过比较更新前后的值来忽略不必要的模板更新 (详细的钩子函数参数见下)。

componentUpdated:指令所在组件的 VNode 及其子 VNode 全部更新后调用。

unbind:只调用一次,指令与元素解绑时调用。

封装自定义指令

通过以上的描述,相信大多数人大概对自定义指令以及指令都有了一定的理解,已经可以开始编写一些简单不重复的指令。但是面对一些复杂而且可能需要经常使用到的自定义指令,这个时候我们最好还是把代码进行一层封装,这样可以方便我们后续的修改和有层次的代码编写。

1.首先可以选择在根目录下新建文件夹directive

2.创建自定义指令的文件夹

3.文件夹下的index.js文件,例如实现一键复制文本内容,用于鼠标右键粘贴。

const copy = {
  bind(el, { value }) {
    el.$value = value
    el.handler = () => {
      if (!el.$value) {
        // 值为空的时候,给出提示。可根据项目UI仔细设计
        console.log('无复制内容')
        return
      }
      // 动态创建 textarea 标签
      const textarea = document.createElement('textarea')
      // 将该 textarea 设为 readonly 防止 iOS 下自动唤起键盘,同时将 textarea 移出可视区域
      textarea.readOnly = 'readonly'
      textarea.style.position = 'absolute'
      textarea.style.left = '-9999px'
      // 将要 copy 的值赋给 textarea 标签的 value 属性
      textarea.value = el.$value
      // 将 textarea 插入到 body 中
      document.body.appendChild(textarea)
      // 选中值并复制
      textarea.select()
      const result = document.execCommand('Copy')
      if (result) {
        console.log('复制成功') // 可根据项目UI仔细设计
      }
      document.body.removeChild(textarea)
    }
    // 绑定点击事件,就是所谓的一键 copy 啦
    el.addEventListener('click', el.handler)
  },
  // 当传进来的值更新的时候触发
  componentUpdated(el, { value }) {
    el.$value = value
  },
  // 指令与元素解绑的时候,移除事件绑定
  unbind(el) {
    el.removeEventListener('click', el.handler)
  },
}
export default copy

4.directive下需要有一个总管全局directive的文件,便于我们进行全局注册时的操作。

directive/index.js

import copy from './copy'
// 自定义指令
const directives = {
  copy,
}
export default {
  install(Vue) {
    Object.keys(directives).forEach((key) => {
      Vue.directive(key, directives[key])
    })
  },

5.全局进行遍历注册,main.js.Vue.use函数会调用我们写好的install,相当于运行我们install里面的代码

import Vue from 'vue'
import Directives from '@/directive'
Vue.use(Directives)

到此这篇关于Vue自定义指令深入探讨实现的文章就介绍到这了,更多相关Vue自定义指令内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Vue自定义指令深入探讨实现

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Vue自定义指令深入探讨实现

这篇文章主要介绍了Vue自定义指令的实现,Vue支持自定义指令,开发者可以根据自己的需求,创建自己的指令来扩展Vue的功能,需要详细了解可以参考下文
2023-05-19

深入解析Vue的自定义指令

这篇文章主要介绍了深入解析Vue的自定义指令,自定义指令主要是为了重用涉及普通元素的底层DOM访问的逻辑,一个自定义指令由一个包含类似组件生命周期钩子的对象来定义,需要的朋友可以参考下
2023-05-18

深入了解Vue中的自定义指令

对于Vue的自定义指令相信很多同学已经有所了解,自定义指令的具体写法这里就不细讲了,官方文档很详细。 但是不知道各位同学有没有这种感觉,就是这个技术感觉很方便,也不难,我也感觉学会了,就是不知道如何去应用。这篇文档就是为了解决一些同学的这些问题才写出来的。
2022-11-22

Vue中如何实现自定义指令?

Vue.js提供自定义指令功能,用于扩展其功能。创建自定义指令涉及定义指令对象并注册它。指令生命周期钩子函数在不同阶段调用。示例:v-highlight指令可高亮文本。自定义指令在创建可重用组件、扩展Vue功能、优化性能等场景中很有用。最佳实践包括保持简单、考虑性能、遵循命名约定和提供文档。
Vue中如何实现自定义指令?
2024-04-02

Vue中的自定义指令怎么实现

今天小编给大家分享一下Vue中的自定义指令怎么实现的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。试炼:实现v-mymodel
2023-07-04

Vue自定义指令及使用实例

这篇文章主要介绍了Vue自定义指令及使用实例,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、什么是指令学习 vue 的时候肯定会接触指令,那么什么是指令呢?在 vue 中提
2023-06-15

Vue实现带参数的自定义指令示例

这篇文章主要为大家介绍了Vue实现带参数的自定义指令示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2023-01-11

Vue如何自定义指令实现元素拖动

这篇文章主要介绍了Vue如何自定义指令实现元素拖动的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Vue如何自定义指令实现元素拖动文章都会有所收获,下面我们一起来看看吧。一、自定义指令在使用自定义指令之前,先对自
2023-06-26

Vue实例的高级用法:探索其自定义指令和mixins

探索Vue实例的高级特性:自定义指令和mixins
Vue实例的高级用法:探索其自定义指令和mixins
2024-02-18

Vue实用的自定义指令有哪些

这篇文章主要讲解了“Vue实用的自定义指令有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Vue实用的自定义指令有哪些”吧!前言:Vue自定义指令有全局注册和局部注册两种方式。先来看看注
2023-06-29

深入探讨PyCharm中自动换行的机制及实现

在软件开发中,PyCharm是一款被广泛使用的集成开发环境。它能够为开发者提供丰富的功能和工具,使得编程变得更加高效和愉快。其中,自动换行功能是PyCharm中的一个重要特性,本文将深度解读自动换行的原理和实现,并提供具体的代码示例。自动
深入探讨PyCharm中自动换行的机制及实现
2024-02-24

Vue自定义指令的使用实例介绍

作为使用Vue的开发者,我们对Vue指令一定不陌生,诸如v-model、v-on、等,同时Vue也为开发者提供了自定义指令的api,熟练的使用自定义指令可以极大的提高了我们编写代码的效率,让我们可以节省时间开心的摸鱼
2023-05-16

编程热搜

目录