Vue 3中实现多个自定义组件之间的切换
在 Vue 3 中,如果你想在 HTML 页面中实现多个自定义组件之间的切换,你可以使用 Vue 的条件渲染功能,比如 v-if、v-else-if 和 v-else 指令,或者使用 <component> 标签结合 is 属性来动态绑定组件。
1. 打开HBuilder X
图1
2. 新建一个空项目
文件->新建->项目->uni-app
填写项目名称:vue3demo
选择项目存放目录:D:/HBuilderProjects
一定要注意vue的版本,当前选择的版本为vue3
图2
点击“创建”之后进入项目界面
图3
其中各文件的作用
(1)pages是存放页面的文件夹
(2)Static是存放图片等资源的文件夹
(3)Manifest.json是项目的配置文件
(4)Pages.json是项目的页面配置文件
3. 新建自定义组件
(1)新建组件存放的文件夹。在项目vue3demo上右键->新建->目录,目录名称:components(不能更改)。
(2)定义自定义组件。假设有两个组件ComponentA和ComponentB。在目录components上右键->新建组件,组件名称为:ComponentA.vue。
图4
ComponentA.vue的代码如下:
<template >
<view class="table">
<h3>登录</h3>
用户名:<input class="input" type="text"/>
密 码:<input class="input" type="safe-password"/>
<button class="btn">登录</button>
</view>
</template>
<script>
export default {
name:"ComponentA",
data() {
return {
};
}
}
</script>
<style>
.table{
width: 300px;
height: 200px;
border: 1px solid #ccc;
text-align: center;
}
.input{
border: 1px solid #ccc;
}
.btn{
margin: 10px;
background-color: aquamarine;
}
</style>
图5
主要包含三个部分
- <template>组件界面内容
- <script>组件绑定数据
- <style>设定组件界面的样式
(3)同样的方法新建其他组件,在项目vue3demo上右键->新建组件,组件名称为:ComponentB.vue。代码如下:
<template >
<view class="table">
<h3>注册</h3>
用户名:<input class="input" type="text"/>
密 码:<input class="input" type="safe-password"/>
<button class="btn">注册</button>
</view>
</template>
<script>
export default {
name:"ComponentB",
data() {
return {
};
}
}
</script>
<style>
.table{
width: 300px;
height: 200px;
border: 1px solid #ccc;
text-align: center;
}
.input{
border: 1px solid #ccc;
}
.btn{
margin: 10px;
background-color: aquamarine;
}
</style>
4. 在主应用中使用条件渲染
在你的主应用组件(比如index.vue)中,你可以使用v-if和v-else来根据某个条件(比如一个数据属性)来切换这两个组件。在pages/index/index.vue页面中写入代码:
<template>
<div id="app">
<button @click="currentComponent = 'ComponentA'">显示ComponentA</button>
<button @click="currentComponent = 'ComponentB'">显示ComponentB</button>
<!-- 使用 v-if 和 v-else 来切换组件 -->
<component :is="currentComponent"></component>
<!-- 或者你也可以使用 v-if 和 v-else-if 单独控制每个组件 -->
<!--
<ComponentA v-if="currentComponent === 'ComponentA'" />
<ComponentB v-else-if="currentComponent === 'ComponentB'" />
-->
</div>
</template>
<script>
import ComponentA from '../../components/ComponentA.vue';
import ComponentB from '../../components/ComponentB.vue';
export default {
name: 'App',
components: {
ComponentA,
ComponentB
},
data() {
return {
currentComponent: 'ComponentA' // 初始显示的组件
};
}
};
</script>
主要包括四个部分:
- <template>显示和切换组件的界面
- <script>引入、注册和绑定组件
效果如图:
图6
在这个例子中,我们有两个按钮,每个按钮都绑定了一个点击事件处理器,用于更改 currentComponent 数据属性的值。<component :is="currentComponent"></component>这行代码会根据currentComponent 的值来动态渲染相应的组件。
你也可以选择使用 v-if 和 v-else-if 单独控制每个组件的渲染,但这通常会增加模板的复杂性,特别是在你有多个组件需要切换时。使用<component>标签和is属性是一种更简洁且可扩展的方法。
5. 运行看效果
运行->运行到浏览器->Edge
图7
单击选择“显示ComponentB”
图8