【愚公系列】《循序渐进Vue.js 3.x前端开发实践》031-使用自定义指令

举报
愚公搬代码 发表于 2025/02/28 23:22:27 2025/02/28
【摘要】 标题详情作者简介愚公搬代码头衔华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主,阿里云签约作者,腾讯云优秀博主,腾讯云内容共创官,掘金优秀博主,亚马逊技领云博主,51CTO博客专家等。近期荣誉2022年度博客之星TOP2,2023年度博客之星TOP2,2022年华为云十佳博主,2023年华为云十佳博主,2024年华为云十佳...
标题 详情
作者简介 愚公搬代码
头衔 华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主,阿里云签约作者,腾讯云优秀博主,腾讯云内容共创官,掘金优秀博主,亚马逊技领云博主,51CTO博客专家等。
近期荣誉 2022年度博客之星TOP2,2023年度博客之星TOP2,2022年华为云十佳博主,2023年华为云十佳博主,2024年华为云十佳博主等。
博客内容 .NET、Java、Python、Go、Node、前端、IOS、Android、鸿蒙、Linux、物联网、网络安全、大数据、人工智能、U3D游戏、小程序等相关领域知识。
欢迎 👍点赞、✍评论、⭐收藏

🚀前言

在 Vue.js 中,指令是增强 HTML 元素的一种强大方式,使得开发者能够在模板中实现更复杂的逻辑。虽然 Vue 提供了一些内置指令(如 v-if、v-for 和 v-bind),但在实际开发中,我们常常会遇到一些特定需求,这时自定义指令便成为了一个极佳的解决方案。通过自定义指令,开发者可以将常用的行为封装起来,提高代码的复用性和可维护性。

本篇文章将深入探讨如何使用自定义指令,涵盖其基本概念、创建方法以及应用场景。我们将介绍自定义指令的生命周期钩子函数,帮助你理解如何在不同阶段对 DOM 进行操作。此外,我们还将通过实际案例来展示如何将自定义指令应用于项目中,以解决特定的需求和优化用户体验。

🚀一、使用自定义指令

🔎1.HTML 部分解析

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Vue组件自定义指令</title>
    <script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
</head>
<body>
    <div id="Application">
        <input v-getfocus:custom="{a:1, b:2}" />
    </div>
    <script>
        ...
    </script>
</body>
</html>
  • <input v-getfocus:custom="{a:1, b:2}" />:这是一个包含了自定义指令 v-getfocus 的输入框元素。这个指令有两个部分:
    1. v-getfocus:是自定义指令的名字,Vue 会根据这个指令去执行对应的逻辑。
    2. :custom="{a:1, b:2}":是传递给指令的修饰符(custom)以及绑定的对象值 {a:1, b:2}。这个对象会作为指令的参数传递到指令处理函数中。

🔎2.JavaScript 部分解析

const App = Vue.createApp({})
  • Vue.createApp({}):创建一个 Vue 应用实例,App 是该应用的实例对象。

🦋2.1 自定义指令的定义

App.directive('getfocus', {
    mounted(element, param) {
        console.log(param.value)
        // 将打印 参数:custom
        console.log("参数:" + param.arg)
    }
})
  • App.directive('getfocus', {...})App.directive 用于注册一个自定义指令,'getfocus' 是指令的名称。这个指令会在应用中的元素上生效,getfocus 会绑定到相应的元素上。

  • mounted 钩子:

    • mounted(element, param):当指令绑定到 DOM 元素上并且元素被插入到 DOM 时调用。这个钩子函数有两个参数:
      1. element:指令绑定的 DOM 元素(这里是 <input>)。
      2. param:是指令的参数对象,包含了传递给指令的一些信息。具体来说:
        • param.arg:指令的修饰符参数。这里是 custom,因为在 HTML 中我们用了 v-getfocus:custom
        • param.value:指令绑定的值,即 v-getfocus:custom="{a:1, b:2}" 中的 {a:1, b:2}
  • console.log(param.value):打印指令绑定的值,这里是 "{a:1, b:2}"

  • console.log("参数:" + param.arg):打印修饰符的名字,这里是 custom

🔎3.App.mount("#Application")

App.mount("#Application")
  • App.mount("#Application"):将 Vue 应用挂载到页面中 id="Application" 的元素上。此时,Vue 会控制该元素及其子元素,并将自定义指令 v-getfocus 应用于 <input> 元素。

🔎4.代码逻辑总结

  1. 自定义指令:

    • 我们通过 App.directive('getfocus', {...}) 注册了一个名为 getfocus 的自定义指令。
    • 该指令使用了 mounted 钩子,当它绑定的 DOM 元素(这里是 <input>)被插入到页面时会执行。mounted 钩子接收到两个参数:
      1. element:指令作用的 DOM 元素(即 <input>)。
      2. param:包含了指令的参数信息,如修饰符 arg 和绑定的值 value
  2. HTML 部分的指令使用:

    • <input v-getfocus:custom="{a:1, b:2}" />:使用 v-getfocus 自定义指令,并传递了一个名为 custom 的修饰符以及一个绑定对象 {a:1, b:2}
    • 当 Vue 渲染页面并挂载时,v-getfocus 会被触发,指令的 mounted 钩子会打印出 param.value(即 {a:1, b:2})和 param.arg(即 custom)到控制台。

🔎5.控制台输出

  • 当页面加载并挂载 Vue 应用时,控制台将输出以下信息:
    {a:1, b:2}
    参数:custom
    

在这里插入图片描述

🔎6.总结

  1. 自定义指令:Vue 3 中的自定义指令使得开发者能够扩展 HTML 元素的功能。通过 App.directive 注册指令,指令可以绑定到元素上并执行特定的逻辑。
  2. 指令参数:自定义指令可以接受修饰符(如 :custom)和绑定的值(如 {a:1, b:2})。这些参数可以通过 param.argparam.value 传递到指令的钩子中。
  3. 应用实例:通过 mounted 钩子,我们可以访问绑定的元素和传递给指令的参数,并做出相应的处理。

这段代码展示了如何定义一个简单的自定义指令,并利用 Vue 3 的指令系统处理元素的行为。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。