广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >vue3的自定义指令directives实现
  • 174
分享到

vue3的自定义指令directives实现

2024-04-02 19:04:59 174人浏览 安东尼
摘要

目录一、什么是自定义指令二、指令的分类三、指令的作用四、指令的钩子五、钩子参数六、指令的使用指令的参数和修饰符一、什么是自定义指令 我们已经熟悉Vue内置的一系列指令 ,比如 v-m

一、什么是自定义指令

我们已经熟悉Vue内置的一系列指令 ,比如 v-model, v-show, v-if, v-for等等,自定义指令从命名上看主要区别于Vue自带的内置指令,我们可以创建自己想要的指令,使用必须以v-为前缀

二、指令的分类

局部指令:组件中通过directives选项实现,只能在当前组件中使用

全局指令:应用实例的directive方法,可以在任意组件中被使用(所有内置指令都为全局指令)

三、指令的作用

  • 代码重用
  • 处理普通元素的底层 DOM 访问的逻辑

四、指令的钩子

指令的钩子和组件的生命周期很像,只是没有beforeCreate

const myDirective = {
  // 在绑定元素的 attribute 前
  // 或事件监听器应用前调用
  created(el, binding, vnode, prevVnode) {
    // 下面会介绍各个参数的细节
  },
  // 在元素被插入到 DOM 前调用
  beforeMount() {},
  // 在绑定元素的父组件
  // 及他自己的所有子节点都挂载完成后调用
  mounted() {},
  // 绑定元素的父组件更新前调用
  beforeUpdate() {},
  // 在绑定元素的父组件
  // 及他自己的所有子节点都更新后调用
  updated() {},
  // 绑定元素的父组件卸载前调用
  beforeUnmount() {},
  // 绑定元素的父组件卸载后调用
  unmounted() {}
}

五、钩子参数

指令的钩子会传递以下几种参数:

  • el:指令绑定到的元素。这可以用于直接操作 DOM。
  • binding:一个对象,包含以下 property:
    • value:传递给指令的值。例如在 v-my-directive=“1 + 1” 中,值是 2。
    • oldValue:之前的值,仅在 beforeUpdate 和 updated 中可用。无论值是否更改,它都可用。
    • arg:传递给指令的参数 (如果有的话)。例如在 v-my-directive:foo 中,参数是 “foo”。
    • modifiers:一个包含修饰符的对象 (如果有的话)。例如在 v-my-directive.foo.bar 中,修饰符对象是 { foo: true, bar: true }。
    • instance:使用该指令的组件实例。
    • dir:指令的定义对象。
  • vnode:代表绑定元素的底层 VNode。
  • prevNode:之前的渲染中代表指令所绑定元素的 VNode。仅在 beforeUpdate 和 updated 钩子中可用。

六、指令的使用

简单需求: 当某个元素挂载完成后可以自定获取焦点

默认的实现方式,假如有多个地方需要使用时,这种实现方式的代码会显得繁杂冗余

<template>
  <div>
    <input type="text" ref="input" />
  </div>
</template>

<script>
import { ref, onMounted } from "vue";

export default {
  setup () {
    const input = ref(null);

    onMounted(() => {
      input.value.focus();
    })

    return {
      input
    }
  }
}
</script>

<style scoped>
</style>

使用自定义指令实现

<template>
  <input type="text" v-focus />
</template>
<script setup>
// 在模板中启用 v-focus
const vFocus = {
  mounted: (el) => el.focus()
}
</script>

注:在<script setup> 中,任何以 v 开头的驼峰式命名的变量都可以被用作一个自定义指令,vFocus 即可以在模板中以 v-focus 的形式使用

如果不使用 <script setup>,自定义指令可以通过 directives 选项注册

<template>
  <input type="text" v-focus />
</template>
<script>
export default {
  setup() {
    
  },
  directives: {
    focus: {
       mounted: (el) => el.focus()
    }
  }
}
</script>

也可以全局注册该指令,这样所有组件都可以使用v-focus

const app = createApp({})

// 使 v-focus 在所有组件中都可用
app.directive('focus', {
 	mounted: (el) => el.focus()
})

指令的参数和修饰符

假如我们使用这样一个指令v-example

<div v-example:params.lazy="someValue"></div>

此时指令钩子函数的binding 参数会是一个这样的对象:

{
  arg: 'params',
  modifiers: { lazy: true },
  value: ,
  oldValue: 
}

也就是说指令:后面跟着的是指令的参数,.后面跟着的是指令的修饰符

简单示例一:

背景高亮

<template>
  <div>
    <div v-highlight>默认的高亮颜色</div>
    <div v-highlight="{ bGColor: 'red', color: 'yellow' }">这是一个简单的例子</div>
  </div>
</template>
<script>
export default {
  setup() {
    
  },
  directives: {
    highlight: {
      mounted(el, binding) {
        console.log('binding', binding)
        const color = binding.value && binding.value.color ? binding.value.color : '#fff'
        const bgColor = binding.value && binding.value.bgColor ? binding.value.bgColor : 'blue'
        el.style.color = color
        el.style.backgroundColor = bgColor
      }
    }
  }
}
</script>

在这里插入图片描述

简单示例二:

<template>
  <div>
    <div v-letter:uppercase>hello world</div>
  </div>
</template>
<script>
export default {
  setup() {
    
  },
  directives: {
    letter: {
      mounted(el, binding) {
        const text = el.innerhtml
        if (binding.arg === 'uppercase') {
          el.innerHTML = text.toUpperCase()
        } else if (binding.arg === 'lowercase') {
          el.innerHTML = text.toLowerCase()
        } else {
          el.innerHTML = text.split('')
        }
      }
    }
  }
}
</script>

在这里插入图片描述

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

--结束END--

本文标题: vue3的自定义指令directives实现

本文链接: https://www.lsjlt.com/news/165558.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • vue3的自定义指令directives实现
    目录一、什么是自定义指令二、指令的分类三、指令的作用四、指令的钩子五、钩子参数六、指令的使用指令的参数和修饰符一、什么是自定义指令 我们已经熟悉Vue内置的一系列指令 ,比如 v-m...
    99+
    2022-11-13
  • 怎么在Vue3中实现自定义指令
    这篇文章主要介绍“怎么在Vue3中实现自定义指令”,在日常操作中,相信很多人在怎么在Vue3中实现自定义指令问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么在Vue3中实现自定义指令”的疑惑有所帮助!接下来...
    99+
    2023-07-02
  • vue3自定义指令详情
    目录一、注册自定义指令1.1、全局自定义指令1.2、局部自定义指令二、自定义指令中的生命周期钩子函数三、自定义指令钩子函数的参数四、自定义指令参数一、注册自定义指令 以下实例都是实现...
    99+
    2022-11-12
  • 如何在Vue3中实现自定义指令(超详细!)
    目录前言生命周期钩子的参数简化形式对象字面量在组件上使用指令几个实用的自定义指令自动聚焦v-focus防抖v-debounce节流v-throttle弹窗隐藏v-hide总结在开发V...
    99+
    2022-11-13
  • vue3中怎么自定义指令实现按钮防抖
    这篇“vue3中怎么自定义指令实现按钮防抖”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“vue3中怎么自定义指令实现按钮防抖...
    99+
    2023-07-05
  • vue3+TS实现自定义指令长按触发绑定的函数
    目录编写自定义指令时遇到的几个难点1.自定义指令的类型2.在ts中使用setTimeout() 函数3.自定义指令的传参问题代码而然间看到一个在vue2中写的长按触发事件的自定义指定...
    99+
    2022-12-29
    vue3 ts自定义指令 vue3 ts自定义长按指令
  • 如何写一个Vue3的自定义指令
    目录背景插件指令的实现前端巅峰 以下文章来源于微信公众号前端巅峰 背景 众所周知,Vue.js 的核心思想是数据驱动 + 组件化,通常我们开发页面的过程就是在编写一些组件,...
    99+
    2022-11-12
  • vue3自定义指令的方法是什么
    这篇文章主要介绍“vue3自定义指令的方法是什么”,在日常操作中,相信很多人在vue3自定义指令的方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”vue3自定义指令的方法是什么”的疑惑有所帮助!接下来...
    99+
    2023-07-04
  • 怎么写一个Vue3的自定义指令
    本篇内容主要讲解“怎么写一个Vue3的自定义指令”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么写一个Vue3的自定义指令”吧!背景众所周知,Vue.js 的核心思想是数据驱动 + 组件化,通...
    99+
    2023-06-26
  • vue3自定义指令方法是什么
    这篇文章主要讲解了“vue3自定义指令方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“vue3自定义指令方法是什么”吧!一、注册自定义指令以下实例都是实现一个输入框自动获取焦点的自定...
    99+
    2023-06-21
  • vue3自定义指令实现按钮防抖示例详解
    目录写在前面自定义指令实现按钮防抖实现思路代码实现总结写在前面 在实际项目开发过程中,对于按钮的提交事件来说,我们需要限制按钮重复点击,避免在某个时间内重复提交。这时候我们一般用到...
    99+
    2023-02-27
    vue3自定义指令按钮防抖 vue 按钮防抖
  • Vue3怎么编写自定义指令插件
    今天小编给大家分享一下Vue3怎么编写自定义指令插件的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。编写自定义插件//&nbs...
    99+
    2023-07-02
  • vue自定义指令directives及其常用钩子函数说明
    目录自定义指令directives及常用钩子函数说明钩子函数vue 全局定义局部定义(vue-cli)钩子函数里面的参数vue 自定义指令 directives选项dire...
    99+
    2022-11-13
  • Vue3中的setup与自定义指令怎么使用
    setup语法糖 最大好处就是所有声明部分皆可直接使用,无需return出去注意:部分功能还不完善,如:name、render还需要单独加入script标签按compositionAPI方式编写// setup 下还可以附加<scri...
    99+
    2023-05-14
    Vue3 setup
  • Vue3中的setup与自定义指令如何使用
    本篇内容主要讲解“Vue3中的setup与自定义指令如何使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Vue3中的setup与自定义指令如何使用”吧!setup语法糖最大好处就是所有声明部分...
    99+
    2023-07-06
  • Vue3中关于setup与自定义指令详解
    目录setup语法糖 setup语法糖独有 自定义指令相关 setup语法糖  最大好处就是所有声明部分皆可直接使用,无需return出去 注意:部分功能还不完善...
    99+
    2023-05-16
    Vue3 自定义指令 Vue3 setup
  • Vue3实现自定义指令拦截点击事件的示例代码
    目录问题解决方案案例逻辑页面中的使用案例使用Vue3举例,如在Vue2中使用思路是一致的,语法稍有区别。 问题 某些应用场景会给点击事件添加权限,不存在权限就 拦截 点击事件(或触发...
    99+
    2023-02-13
    Vue3自定义指令拦截点击事件 Vue3指令拦截点击事件 Vue3指令拦截
  • Vue3编写自定义指令插件的示例代码
    编写自定义插件 // src/plugins/directive.ts import type { App } from 'vue' // 插件选项的类型 interface Opt...
    99+
    2022-11-13
  • 一文教你学会在Vue3中自定义指令
    目录1. 成果展示2. 指令基础2.1 两种作用域2.2 七个钩子函数2.3 四个参数2.4 动态参数3. 自定义权限指令TienChin 项目前端是 Vue3,前端有这样的一个需求...
    99+
    2022-11-13
  • vue3使用自定义指令实现eldialog拖拽功能示例详解
    目录实现el-dialog的拖拽功能通过自定义指令实现拖拽功能实现拖拽功能使用方式实现el-dialog的拖拽功能 这里指的是 element-plus 的el-dialog组件,一...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作