当前位置:首页 > VUE

vue实现切换组件

2026-01-20 07:28:27VUE

Vue 实现组件切换的方法

动态组件 <component :is>

使用 Vue 内置的 <component> 标签配合 :is 动态绑定组件名,通过改变 is 的值切换组件:

<template>
  <component :is="currentComponent"></component>
  <button @click="currentComponent = 'ComponentA'">切换A</button>
  <button @click="currentComponent = 'ComponentB'">切换B</button>
</template>

<script>
import ComponentA from './ComponentA.vue';
import ComponentB from './ComponentB.vue';

export default {
  data() {
    return {
      currentComponent: 'ComponentA'
    };
  },
  components: { ComponentA, ComponentB }
};
</script>

条件渲染 v-if/v-show

通过 v-ifv-show 控制组件的显示与隐藏:

<template>
  <ComponentA v-if="showComponentA" />
  <ComponentB v-if="!showComponentA" />
  <button @click="showComponentA = !showComponentA">切换组件</button>
</template>

<script>
import ComponentA from './ComponentA.vue';
import ComponentB from './ComponentB.vue';

export default {
  data() {
    return {
      showComponentA: true
    };
  },
  components: { ComponentA, ComponentB }
};
</script>

路由切换(Vue Router)

通过 Vue Router 的路由配置实现页面级组件切换:

  1. 安装并配置路由:
    
    // router/index.js
    import { createRouter, createWebHistory } from 'vue-router';
    import ComponentA from '../views/ComponentA.vue';
    import ComponentB from '../views/ComponentB.vue';

const routes = [ { path: '/a', component: ComponentA }, { path: '/b', component: ComponentB } ];

const router = createRouter({ history: createWebHistory(), routes });

export default router;


2. 在组件中使用 `<router-link>` 或编程式导航:
```html
<template>
  <router-link to="/a">显示A</router-link>
  <router-link to="/b">显示B</router-link>
  <router-view></router-view>
</template>

状态管理(Vuex/Pinia)

通过状态管理工具全局管理当前显示的组件:

// store.js (Pinia示例)
import { defineStore } from 'pinia';

export const useComponentStore = defineStore('component', {
  state: () => ({
    current: 'ComponentA'
  }),
  actions: {
    toggle() {
      this.current = this.current === 'ComponentA' ? 'ComponentB' : 'ComponentA';
    }
  }
});
<template>
  <ComponentA v-if="store.current === 'ComponentA'" />
  <ComponentB v-if="store.current === 'ComponentB'" />
  <button @click="store.toggle()">切换</button>
</template>

<script setup>
import { useComponentStore } from './store';
const store = useComponentStore();
</script>

动画过渡效果

为组件切换添加过渡动画:

vue实现切换组件

<template>
  <transition name="fade" mode="out-in">
    <component :is="currentComponent"></component>
  </transition>
</template>

<style>
.fade-enter-active, .fade-leave-active {
  transition: opacity 0.5s;
}
.fade-enter-from, .fade-leave-to {
  opacity: 0;
}
</style>

标签: 组件vue
分享给朋友:

相关文章

vue实现点击样式

vue实现点击样式

Vue 实现点击样式的方法 在 Vue 中实现点击样式可以通过多种方式完成,以下是几种常见的方法: 方法一:使用 v-bind:class 动态绑定类名 通过数据驱动的方式动态切换类名,结合 CS…

vue 方法实现

vue 方法实现

在 Vue 中,方法的实现通常通过 methods 选项完成。以下是 Vue 方法实现的核心要点和示例: 基本方法定义 在 Vue 组件中定义方法时,需将函数声明放在 methods 对象内。这些方…

vue实现后退

vue实现后退

Vue 实现后退功能的方法 在 Vue 中实现后退功能通常可以通过以下几种方式完成,具体取决于应用场景和需求。 使用 window.history API 通过原生 JavaScript 的 win…

vue实现分发

vue实现分发

Vue 实现分发的方法 在 Vue 中,分发(Distribution)通常指的是将内容从父组件传递到子组件,或者通过插槽(Slots)机制让父组件控制子组件的部分渲染内容。以下是几种常见的实现分发的…

实现vue cli

实现vue cli

安装 Vue CLI 确保系统中已安装 Node.js(版本建议 12.x 或更高)。通过 npm 全局安装 Vue CLI: npm install -g @vue/cli 安装完成后验证版本:…

vue filter 实现

vue filter 实现

在 Vue.js 中,过滤器(Filter)是一种用于文本格式化的功能,可以在模板中直接使用。以下是实现过滤器的详细方法: 全局过滤器注册 通过 Vue.filter 方法注册全局过滤器,可在所有组…