跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
JavaScript大前端

Vue 组件切换实战:动态组件与 Tab 切换实现

本文演示了 Vue 中动态组件的切换方案。利用 component 标签配合 is 指令,结合 computed 计算属性,实现了基于 Tab 点击切换不同组件的功能。代码包含完整 HTML 结构及 Vue3 逻辑,重点讲解了组件注册、动态绑定及 keep-alive 状态保留机制,适用于构建多视图前端界面。

内存管理发布于 2019/7/26更新于 2026/10/2487 浏览
Vue 组件切换实战:动态组件与 Tab 切换实现

在掌握了 Vue 组件的基础创建方式以及 data、methods 属性后,接下来我们深入一个实际场景:如何在页面中动态切换不同的组件。

这种需求在前端开发中非常常见,比如 Tab 标签页切换、多视图导航等。通过本案例,我们将重点讲解如何利用 Vue 的动态组件功能来实现平滑的视图切换。

核心思路

Vue 提供了 <component> 标签配合 :is 指令,可以动态地渲染组件。当绑定的变量变化时,页面会自动切换对应的组件实例,无需手动销毁或重新挂载 DOM。

代码实现

下面是一个完整的 HTML 示例,展示了如何使用 CDN 引入 Vue 3 并实现两个子组件的切换。

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>Vue 组件切换</title>
    <script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
    <style>
        .tab-btn { padding: 10px 20px; cursor: pointer; border: 1px solid #ccc; }
        .active { background-color: #42b983; color: white; }
        .container { margin-top: 20px; border: 1px solid #eee; padding: 20px; }
    </style>
</head>
<body>
<div id="app">
    <!-- 切换按钮 -->
    <div class="buttons">
        <button 
            v-for="tab in tabs" 
            :key="tab.id"
            @click="currentTab = tab.id"
            :class="{ active: currentTab === tab.id }"
            class="tab-btn"
        >
            {{ tab.name }}
        </button>
    </div>

    <!-- 动态组件区域 -->
    <div class="container">
        <component :is="currentComponent"></component>
    </div>
</div>

<script>
const { createApp, ref, computed } = Vue;

// 定义第一个组件
const ComponentA = {
    template: '<div><h3>这是组件 A</h3><p>这里展示了一些基础信息。</p></div>'
};

// 定义第二个组件
const ComponentB = {
    template: '<div><h3>这是组件 B</h3><p>这里是另一个模块的内容。</p></div>'
};

createApp({
    components: {
        'component-a': ComponentA,
        'component-b': ComponentB
    },
    setup() {
        const currentTab = ref('a');
        
        // 计算当前要渲染的组件名
        const currentComponent = computed(() => {
            return currentTab.value === 'a' ? 'component-a' : 'component-b';
        });

        const tabs = [
            { id: 'a', name: '模块 A' },
            { id: 'b', name: '模块 B' }
        ];

        return {
            currentTab,
            currentComponent,
            tabs
        };
    }
}).mount('#app');
</script>
</body>
</html>

关键点解析

  1. 注册组件:在 setup 之前,需要确保组件已在 components 选项中注册,这样模板中的 component-a 才能被识别。
  2. 动态绑定::is 属性接收的是组件的名称字符串,而不是组件对象本身。这允许我们通过变量控制渲染内容。
  3. 性能考虑:默认情况下,切换组件会销毁旧实例并创建新实例。如果希望保留状态(例如输入框的值),可以包裹 <keep-alive> 标签。

通过这个案例,你应该能理解 Vue 处理组件切换的核心机制。在实际项目中,结合路由或状态管理库,这套逻辑同样适用。

目录

  1. 核心思路
  2. 代码实现
  3. 关键点解析

更多推荐文章

查看全部
  • Stack-Chan 机器人入门与开发实战
  • Linux 进程信号的产生机制详解
  • Altera USB-Blaster 驱动安装与 FPGA 下载调试指南
  • DeepSeek R1 个人 AI 知识库搭建指南(API 与本地部署)
  • Whisper.cpp 量化模型清单及 ggml 格式下载指南
  • 机器学习经典算法:深入解析决策树原理与实现
  • Java volatile 关键字:底层原理、应用场景与最佳实践
  • Java 泛型与通配符:从原理到实战
  • 大模型商业化能力成竞争关键:百度文心实践分析
  • Gitea 本地部署指南:安装配置与常用 Git 命令实战
  • 数据结构复习:Java 顺序表与 ArrayList 详解
  • 开源 AI 助手 Molt Bot 国内 Docker 部署指南
  • 企业级 Nginx 高性能部署与优化实战
  • 异步定时任务系统设计与 Rust 实战集成
  • Linux 网络基础:TCP/IP 协议栈与分层模型解析
  • S95×S88×UNS 智能制造架构设计:以可交付机制为核心
  • 前端防录屏原理:EME DRM 机制解析与实战代码
  • AI 时代人类开发者如何保持创意优势与价值定位
  • DeepSeek 与通义万相结合制作 AI 视频实战详解
  • 基于 FPGA 的高精度 TDC 设计

相关免费在线工具

  • Keycode 信息

    查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online

  • Escape 与 Native 编解码

    JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online

  • JavaScript / HTML 格式化

    使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online

  • JavaScript 压缩与混淆

    Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online