vue、uniapp实现组件动态切换

25 篇文章 1 订阅
17 篇文章 0 订阅

在Vue中,通过使用动态组件,我们可以实现组件的动态切换,从而达到页面的动态展示效果。

vue 中 component组件 is属性

 功能描述 

例如:有多个tabs标签,如:推荐、热点、视频等。用户点击标签就会切换到对应组件

vue2版

<template>
	<!-- 标签数据 -->
	<!-- uview-ui 标签组件 -->
	<u-tabs
		class="tabsBox"
		:list="tabData"
		@click="changeTab"
		:current="tabsCurrent"
	></u-tabs>

	<!-- 组件切换 -->
	<component :is="getCurrentCompName"></component>
</template>

<script>
import CompA from './components/comp-a.vue'
import CompB from './components/comp-b.vue'
import CompC from './components/comp-c.vue'

export default {
	data() {
		return {
			tabsCurrent: 0,
			tabsList: [],
		}
	},
	computed: {
		getCurrentCompName() {
			let currentCompName = ''
			switch (this.tabsCurrent) {
				case 1:
					currentCompName = 'CompB'
					break
				case 2:
					currentCompName = 'CompC'
					break
				default:
					currentCompName = 'CompA'
			}
			return currentCompName
		},
	},

	methods: {
		toggle(index) {
			this.tabsCurrent = index
		},
	},
}
</script>

vue3版

<template>
	<!-- 标签数据 -->
	<!-- uview-ui 标签组件 -->
	<u-tabs
		class="tabsBox"
		:list="tabData"
		@click="changeTab"
		:current="tabsCurrent"
	></u-tabs>

	<!-- 组件切换 -->
	<component :is="getCurrentCompName"></component>
</template>

<script setup>
import { ref, reactive, markRaw} from 'vue';
import CompA from './components/comp-a.vue';
import CompB from './components/comp-b.vue';
import CompC from './components/comp-c.vue';

const tabsCurrent = ref(0);
const tabsList = ref([]);

const getCurrentCompName = () => {
	let currentCompName = '';
	switch (tabsCurrent.value) {
		case 1:
			currentCompName = markRaw(CompB);
			break;
		case 2:
			currentCompName = markRaw(CompC);
			break;
		default:
			currentCompName = markRaw(CompA);
	}
	return currentCompName;
};

const toggle = (index) => {
	tabsCurrent.value = index;
};
</script>

或者

<template>
	<!-- 标签数据 -->
	<!-- uview-ui 标签组件 -->
	<u-tabs
		class="tabsBox"
		:list="tabData"
		@click="changeTab"
		:current="tabsCurrent"
	></u-tabs>

	<!-- 组件切换 -->
	<component :is="currentComp"></component>
</template>

<script setup>
import { ref, reactive, markRaw, shallowRef } from 'vue';
import CompA from './components/comp-a.vue';
import CompB from './components/comp-b.vue';
import CompC from './components/comp-c.vue';

const tabsCurrent = ref(0);
const tabsList = ref([]);
const currentComp = shallowRef(CompA)

const toggle = (index) => {
	tabsCurrent.value = index;
		switch (index) {
		case 1:
			currentComp.value = CompB;
			break;
		case 2:
			currentComp.value = CompC;
			break;
		default:
			currentComp.value = CompA;
	}
};
</script>
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
UniApp是一个基于Vue.js的跨平台框架,它可以帮助开发者快速构建原生应用,包括iOS、Android和Web等平台。在UniApp中,动态切换标签栏(Tab Bar)可以通过` uni-tabbar `组件实现,这个组件提供了一种管理和切换不同页面的功能。 以下是实现动态切换标签栏的基本步骤: 1. **引入组件**:在项目中安装并引入` uni-tabbar `组件,确保已经安装了` @dcloudio/uni-app `依赖。 ```bash npm install @dcloudio/uni-app ``` 2. **配置` uni-tabbar `**:在对应的页面或应用的` app.json `文件中,添加` tabBar `配置,定义每个标签对应的内容、路径和标题。 ```json { "tabBar": { "color": "#fff", "selectedColor": "#f00", "borderStyle": "#dcdcdc", "list": [ { "pagePath": "pages/index/index", // 需切换的页面路径 "text": "首页", // 显示的文字 "iconPath": "path/to/home-icon.png", // 图标路径 "selectedIconPath": "path/to/home-selected-icon.png", // 选中图标路径 "id": "home" // 可选的唯一标识,用于动态设置 }, ... ] } } ``` 3. **动态切换**:在需要改变标签的状态的地方(如点击按钮或导航事件),你可以使用` uni.switchTab `API来切换到指定的页面或更新标签状态。 ```javascript // 示例:切换到ID为'news'的标签页 uni.switchTab({ url: 'pages/news/news', animated: true, // 是否动画切换,默认为true id: 'news' // 或者使用自定义的ID }); ``` 4. **响应事件**:为了实时响应用户的操作,可以在` App.vue `或其他全局组件中监听` tabBar `的事件,例如` active-item-changed `。 ```javascript // App.vue 或其他全局组件 export default { onReady() { uni.on('tabBar:active-item-changed', (e) => { console.log('当前激活的标签:', e.detail); }); }, ... } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值