当前位置: 首页 > news >正文

Vue3(自定义指令directive详解)

文章目录

  • 前言
  • 一、自定义指令的生命周期钩子
  • 二、自定义指令的创建与注册+使用
  • 三、扩展 简化形式​
  • 总结


前言

在Vue3中,自定义指令是一种强大的工具,允许开发者扩展和增强HTML元素的功能。以下是对Vue3中自定义指令的详细解析:

一、自定义指令的生命周期钩子

Vue3中的自定义指令提供了多个生命周期钩子函数,允许开发者在指令的不同阶段执行特定的操作。这些钩子函数包括:

  • created:在绑定元素的attribute或事件监听器被应用之前调用。
  • beforeMount:当指令第一次绑定到元素并且在挂载父组件之前调用。
  • mounted:在绑定元素的父组件被挂载后调用,此时元素已经被插入到DOM中,可以进行DOM操作。
  • beforeUpdate:在更新包含组件的VNode之前调用。
  • updated:在包含组件的VNode及其子组件的VNode更新后调用。
  • beforeUnmount:在卸载绑定元素的父组件之前调用。
  • unmounted:当指令与元素解除绑定且父组件已卸载时,只调用一次。

二、自定义指令的创建与注册+使用

在Vue3中,自定义指令可以通过全局或局部的方式进行注册。

  1. 全局注册:
    全局注册的指令在整个应用中都可用。通常在应用的入口文件(如main.js或main.ts)中进行注册。
    示例代码:
import { createApp } from 'vue'
import App from './App.vue'
import 'vant/lib/index.css'
import './style.css'

import { Directive,DirectiveBinding } from 'vue';

// 定义一个全局指令
const myGlobalDirective = {
    mounted(el:HTMLElement, binding:DirectiveBinding<any>) {
        console.log("我是全局指令");
        console.log(el);
        console.log(binding.value);
      // 在这里添加你的指令逻辑
      el.style.color = binding.value.color || 'black';
      el.style.background = binding.value.background || 'black';
    },
    // 你可以根据需要添加其他生命周期钩子
  };
const app = createApp(App)

//  全局注册指令
app.directive('my-global', myGlobalDirective);
app.mount('#app')

模板中使用全局指令
在这里插入图片描述
在这里插入图片描述
2. 局部注册
局部注册的指令仅在指定的组件中有效。
在这里插入图片描述
模板中使用
在这里插入图片描述

三、扩展 简化形式​

对于自定义指令来说,一个很常见的情况是仅仅需要在 mounted 和 updated 上实现相同的行为,除此之外并不需要其他钩子。这种情况下我们可以直接用一个函数来定义指令,如下所示:

<div v-color="color"></div>
app.directive('color', (el, binding) => {
  // 这会在 `mounted` 和 `updated` 时都调用
  el.style.color = binding.value
})

总结

综上所述,Vue3中的自定义指令是一种强大的工具,允许开发者根据项目需求扩展Vue的功能。通过合理使用自定义指令,可以提升代码的复用性和可维护性,同时增强应用的交互性和用户体验。

相关文章:

  • Kubernetes中将SpringBoot3的application.yaml配置文件迁移到ConfigMap实现配置与代码的分离
  • 简述一下Unity中的碰撞检测
  • c# 2025-3-22 周六
  • 优化 SQL 语句方向和提升性能技巧
  • 比特币驱动金融第八章——探索比特币之外:多样化的挖矿算法
  • EtherCAT转ProfiNet网关如何实现西门子1200PLC与伺服电机通讯(ProfiNet总线协议)
  • 【硬核实战】ETCD+AI智能调度深度整合!从架构设计到调优避坑,手把手教你打造高可用调度系统!
  • Cursor安装注册+基础配置+入门实操
  • elasticsearch+sentencetransformer检索样例
  • SpringBoot3+Vue3实战(Vue3快速开发登录注册页面并对接后端接口、表单项自定义校验规则、Hutool工具类)(4)
  • 深度学习复习笔记(8)特征提取与无监督学习
  • 再学:区块链基础与合约初探 EVM与GAS机制
  • LiteraSageAI 项目介绍
  • hexo+butterfly博客功能完善和美化(四)---博客上传
  • Ubuntu实时读取音乐软件的音频流
  • 网络世界探索之旅:网络编程
  • 深入解析组合模式(Composite Pattern):概念、结构与应用
  • 可视化动态表单动态表单界的天花板--Formily(阿里开源)
  • 阿里云国际站代理商:服务器网页如何应对恶意网络爬虫?
  • ENSP学习day8
  • 佩斯科夫:俄会考虑30天停火提议,但试图对俄施压无用
  • 上海劳模风采馆焕新升级后重新开放,展示480位劳模先进故事
  • 综艺还有怎样的新可能?挖掘小众文化领域
  • 龙湖集团:今年前4个月销售220.8亿元,4月新增两块土地储备
  • 印巴战火LIVE丨“快速接近战争状态”:印度袭击巴军事基地,巴启动反制军事行动
  • 上海证监局规范辖区私募经营运作,6月15日前完成自评自纠