vue3的自定义指令

Vue3中自定义指令介绍及用法

自定义指令是什么

在开发Vue项目时,大多数都会使用到Vue内置的一些指令,如v-modelv-ifv-show等,这些呢,就叫做指令,而我们自己呢也可以随意创建指令,就叫做自定义指令!

自定义指令钩子函数的参数

el:指令所绑定的元素,可以直接操作DOM。 ● binding:是一个对象,包含该指令的所有信息。

binding 包含的属性具体的分别为:

● arg自定义指令的参数名。

● value自定义指令绑定的值。

● oldValue指令绑定的前一个值。

● dir被执行的钩子函数

● modifiers:一个包含修饰符的对象。

如何创建自定义指令

简单来说,一般分为两种,局部指令全局指令,任何以v开头的驼峰式命名的变量都可以被创建为一个自定义指令,然后在模板中使用,下面示例:

  1. 在局部创建使用:修改颜色的指令
js 复制代码
<template>
    <div>
        // 这里使用指令
        <h2 v-color="'#f00'">这是改变的内容</h2>
    </div>
</template>
    
<script setup lang='ts'>
    const vColor = {
        mounted(el: any, binding: any) {
            el.style.color = binding.value;
        },
    }
</script>
  • 效果
  1. 在全局创建:main.js文件内创建,这样所有组件内都可以使用该指令
ts 复制代码
// main.js 文件
import '../src/assets/main.css'

import { createApp } from 'vue'
import { createPinia } from 'pinia'

import App from './App.vue'
import router from './router'

const app = createApp(App)

// 定义的指令
app.directive('color', {
    mounted(el, binding) {
        el.style.color = binding.value
    }
})

app.use(router)
app.mount('#app')
ts 复制代码
<template>
    <div>
        // 直接在任意组件中使用即可,无需引入
        <h2 v-color="'#00f'">全局改变的内容</h2>
    </div>
</template>

效果:

自定义指令的八个生命周期和组件的生命周期类似

js 复制代码
    created() {
        
    },
    beforeMount() {
        
    },
    //dom渲染之后,挂载阶段,教为常用
    mounted(el, binding) {
        console.log(el, binding);
    },
    beforeUnmount() {
        
    },
    //dom节点修改后的阶段,比较常用
    updated(el, binding) {
        console.log(el, binding);
    },
    beforeUpdate() {
        
    },
    beforeDestroy() {
        
    },
    destroyed() {
        
    },

> _ < 每日一签

美好的一天,上帝不会就这样给你,需要自己去创造。

相关推荐
10年前端老司机1 小时前
什么!纯前端也能识别图片中的文案、还支持100多个国家的语言
前端·javascript·vue.js
摸鱼仙人~1 小时前
React 性能优化实战指南:从理论到实践的完整攻略
前端·react.js·性能优化
程序员阿超的博客2 小时前
React动态渲染:如何用map循环渲染一个列表(List)
前端·react.js·前端框架
magic 2452 小时前
模拟 AJAX 提交 form 表单及请求头设置详解
前端·javascript·ajax
小小小小宇6 小时前
前端 Service Worker
前端
只喜欢赚钱的棉花没有糖7 小时前
http的缓存问题
前端·javascript·http
小小小小宇7 小时前
请求竞态问题统一封装
前端
loriloy7 小时前
前端资源帖
前端
源码超级联盟7 小时前
display的block和inline-block有什么区别
前端
GISer_Jing7 小时前
前端构建工具(Webpack\Vite\esbuild\Rspack)拆包能力深度解析
前端·webpack·node.js