【愚公系列】《循序渐进Vue.js 3.x前端开发实践》024-动态组件

举报
愚公搬代码 发表于 2025/02/28 23:19:35 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 框架中,动态组件的概念为我们提供了更高的灵活性和可重用性,使得应用的开发和维护变得更加高效。动态组件允许开发者根据应用状态或用户交互,实时切换不同的组件,从而提升用户体验和应用性能。

本篇文章将深入探讨 Vue 中的动态组件,帮助你理解如何在实际项目中灵活运用这一特性。我们将从动态组件的基本概念入手,详细介绍如何使用 <component> 标签和 v-bind:is 指令来实现组件的动态切换。此外,我们还将讨论动态组件的生命周期以及过渡效果,展示如何为用户提供流畅的视觉体验。

🚀一、动态组件

🔎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 type="radio" value="page1" v-model="page"/>页面1
        <input type="radio" value="page2" v-model="page"/>页面2
        <component :is="page"></component>
    </div>
    <script>
        ...
    </script>
</body>
</html>

在这里插入图片描述

🦋1.1 功能说明

  • <input type="radio" v-model="page"/>:定义了两个单选按钮,v-model="page" 用来绑定 page 变量,用户选择不同的单选按钮时,page 的值会改变。page 的值可以是 "page1""page2",对应着页面组件1和页面组件2。
  • <component :is="page"></component>:Vue 的动态组件语法。通过 :is 指令,component 标签将根据 page 的值动态切换成 page1page2 组件。也就是说,当 page 的值为 "page1" 时,<component> 会渲染 page1 组件;当 page 的值为 "page2" 时,渲染 page2 组件。

🔎2.JavaScript 部分解析

const { createApp, ref } = Vue;
const App = createApp({
    setup() {
        const page = ref("page1"); // 默认展示 page1
        return { page };
    }
});

🦋2.1 说明

  • createApp:用于创建 Vue 应用实例。这个实例的根组件使用了 setup 函数来进行逻辑处理。
  • ref("page1"):在 Vue 3 中,ref 用于定义响应式数据。这里 page 是一个响应式变量,初始值为 "page1",表示默认显示 page1 组件。
  • setup:Vue 3 中 Composition API 的一部分,setup 函数在组件创建时调用,返回的对象会成为模板中可用的数据。这里返回了 page 变量,使其可以在模板中绑定。

🔎3.定义 page1page2 组件

const page1 = {
    template: `<div style="color:red">页面组件1</div>`
};
const page2 = {
    template: `<div style="color:blue">页面组件2</div>`
};

🦋3.1 说明

  • page1page2 是两个简单的 Vue 组件,它们分别展示不同的内容和样式。
    • page1 组件的模板包含一个红色的文本,内容是 “页面组件1”。
    • page2 组件的模板包含一个蓝色的文本,内容是 “页面组件2”。
  • 这些组件是通过 App.component 注册的,确保它们在 Vue 应用中可用。

🔎4.组件注册和挂载

App.component("page1", page1);
App.component("page2", page2);
App.mount("#Application");

🦋4.1 说明

  • App.component("page1", page1)App.component("page2", page2):将 page1page2 组件注册为全局组件,这样在模板中可以通过 <page1><page2> 来使用它们。
  • App.mount("#Application"):将 Vue 应用挂载到 id="Application" 的 DOM 元素上,启动 Vue 实例。

🔎5.逻辑总结

  1. 动态组件:

    • 通过 :is="page"component 标签能够根据 page 的值动态渲染不同的组件。
    • page 的初始值是 "page1",所以页面默认渲染 page1 组件。
    • 用户通过单选按钮选择不同的页面(page1page2),page 的值会发生变化,Vue 会根据新的 page 值重新渲染相应的组件。
  2. 响应式数据:

    • page 变量是响应式的,绑定在单选按钮的 v-model 上。当用户选择不同的按钮时,page 的值会发生改变。Vue 会自动追踪这个变化并更新 DOM。
  3. 组件切换:

    • 使用 component :is="page" 的语法,可以根据动态的数据渲染不同的组件。page1page2 组件的切换是通过 page 的值来控制的。
    • 这种方式使得组件的展示可以非常灵活,可以通过不同的条件动态加载不同的内容。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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