当前位置:首页 > VUE

vue如何实现组件切换

2026-02-22 19:15:59VUE

动态组件切换

使用 Vue 的 <component> 标签结合 is 属性实现动态组件切换。通过绑定 is 属性到变量,动态决定渲染哪个组件。

<template>
  <component :is="currentComponent"></component>
  <button @click="toggleComponent">切换组件</button>
</template>

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

export default {
  data() {
    return {
      currentComponent: 'ComponentA',
    };
  },
  methods: {
    toggleComponent() {
      this.currentComponent = this.currentComponent === 'ComponentA' 
        ? 'ComponentB' 
        : 'ComponentA';
    },
  },
  components: {
    ComponentA,
    ComponentB,
  },
};
</script>

路由切换组件

通过 Vue Router 实现基于路由的组件切换,适合构建单页应用(SPA)。

// router.js
import { createRouter, createWebHistory } from 'vue-router';
import ComponentA from './components/ComponentA.vue';
import ComponentB from './components/ComponentB.vue';

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

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

export default router;
<!-- App.vue -->
<template>
  <router-view></router-view>
  <router-link to="/a">显示A</router-link>
  <router-link to="/b">显示B</router-link>
</template>

条件渲染

通过 v-ifv-show 控制组件的显示与隐藏,适合简单场景。

<template>
  <ComponentA v-if="showComponentA" />
  <ComponentB v-else />
  <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>

状态管理切换

通过 Vuex 或 Pinia 管理全局状态,驱动组件切换。

vue如何实现组件切换

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

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

<script>
import { useComponentStore } from './store';
import { storeToRefs } from 'pinia';

export default {
  setup() {
    const store = useComponentStore();
    const { currentComponent } = storeToRefs(store);
    const { toggleComponent } = store;

    return {
      currentComponent,
      toggle: toggleComponent,
    };
  },
};
</script>

分享给朋友:

相关文章

权限管理vue如何实现

权限管理vue如何实现

基于路由的权限控制 在Vue中可以通过路由守卫实现页面级权限控制。定义路由时添加meta字段标记权限角色: const routes = [ { path: '/admin',…

vue如何实现默认页面

vue如何实现默认页面

Vue 实现默认页面的方法 在 Vue 项目中,通常需要设置一个默认页面(如首页或登录页)作为用户访问时的初始页面。可以通过路由配置实现。 配置路由默认跳转 在 Vue Router 中,使用 re…

vue如何实现两栏布局

vue如何实现两栏布局

使用Flexbox实现两栏布局 Flexbox是CSS3中强大的布局方式,可以轻松实现两栏布局。在Vue中可以直接在组件的style标签中使用。 <template> <div…

uniapp倒计时组件

uniapp倒计时组件

uniapp倒计时组件实现方法 使用内置组件实现 uniapp提供了<countdown>组件用于倒计时功能,支持自定义格式和样式。示例代码如下: <countdown…

uniapp组件写法

uniapp组件写法

Uniapp 组件的基本写法 Uniapp 的组件写法与 Vue 类似,支持单文件组件(.vue 文件)。一个基本的组件通常包含三个部分:<template>、<script>…

react组件如何通讯

react组件如何通讯

React 组件通讯方式 React 组件间的通讯方式主要包括以下几种方法,适用于不同场景下的数据传递和状态管理需求。 父子组件通讯(Props 传递) 父组件通过 props 向子组件传递数据或回…