实现动态组件的方式

ops/2024/10/10 11:46:29/

一、<component :is="放置组件名"></component>(常用)

我们可以定义一个数据并将该数据作为 component 元素的 is 属性值,这个数据保存了组件的名称,当我们需要切换组件时,只需要改变数据所保存的内容即可。

使用 keep-alive 组件与动态组件结合,可以实现在同一挂载点切换显示不同的组件,并且保持组件的状态。比如说第一个组件做了加法,页面展示了新计算出来的数值,使用 keep-alive 可以使得切换到其他组件后再切回来数值保持不变。

如果想在刷新页面后保持组件不变的话,那就得把数据和组件名这些存起来了。

示例代码如下:

javascript"><template><div class="container"><!-- 使用属性绑定指令将指定的数据绑定到属性中 --><keep-alive><component v-bind:is="show"></component></keep-alive><button @click="transfer()">Transfer</button></div>
</template><script>
// 导入组件
import First from "./dynamicCom/firstAssembly.vue";
import Last from "./dynamicCom/lastAssembly.vue";export default {// 定义数据data() {return {show: "First",};},// 注册组件components: {First,Last,},// 定义事件处理函数methods: {transfer() {if (this.show === "First") {this.show = "Last";} else {this.show = "First";}},},
};
</script><style>
</style>

二、 使用<router-view></router-view>(也常用)

 首先要配置路由
javascript">// router.js  
import Vue from 'vue';  
import Router from 'vue-router';  
import ComponentA from './components/ComponentA.vue';  
import ComponentB from './components/ComponentB.vue';  Vue.use(Router);  export default new Router({  routes: [  {  path: '/component-a',  name: 'ComponentA',  component: ComponentA  },  {  path: '/component-b',  name: 'ComponentB',  component: ComponentB  }  // 可以添加更多的路由配置  ]  
});

在上面的配置中,我们定义了两个路由,分别对应 ComponentA 和 ComponentB 这两个组件。当访问 /component-a 路径时,ComponentA会被渲染;当访问/component-b路径时,ComponentB会被渲染。 

其次在入口文件引入并使用这个路由配置
javascript">// main.js  
import Vue from 'vue';  
import App from './App.vue';  
import router from './router'; // 引入路由配置  new Vue({  router, // 将路由配置注入到Vue实例中  render: h => h(App)  
}).$mount('#app');
最后试试在根组件 App.vue 中使用 <router-view> 来显示当前路由对应的组件
javascript"><!-- App.vue -->  
<template>  <div id="app">  // 这里用的是声明式路由,在js中换成编程式路由也是一样的效果<router-link to="/component-a">Go to Component A</router-link>  <router-link to="/component-b">Go to Component B</router-link>  <router-view></router-view> <!-- 这里会根据当前路由显示对应的组件 -->  </div>  
</template>

在上面的模板中,<router-link>用于创建导航链接,to属性指定了链接的目标路由。<router-view>是一个占位符,它会根据当前的路由动态地渲染对应的组件。

当用户点击“Go to Component A”链接时,URL会变为/component-a,并且ComponentA会被渲染到<router-view>的位置。同样地,点击“Go to Component B”链接会切换到ComponentB


http://www.ppmy.cn/ops/13647.html

相关文章

【结构型模式】组合模式

一、组合模式概述 组合模式的定义与意图&#xff1a;将对象组合成树形结构来表现“整体/部分”层次结构。组合能让客户以一致的方式处理个别对象以及对象组合。&#xff08;对象结构型&#xff09; 组合模式分析&#xff1a; 1.当容器对象的某一个方法被调用时&#xff0c;将遍…

SpringBoot基于RabbitMQ实现消息可靠性

文章目录 1. ☃️概述2. ☃️生产者消息确认2.1 ❄️❄️概述2.2 ❄️❄️实战⛷️⛷️⛷️2.2.1 修改配置⛷️⛷️⛷️2.2.2 定义 Return 回调⛷️⛷️⛷️2.2.3 定义ConfirmCallback 3. ☃️消息持久化3.1 ❄️❄️交换机持久化3.2 ❄️❄️队列持久化3.3 ❄️❄️消息持久化…

协议的定制之序列化与反序列化 | 守护进程

目录 一、再谈协议 二、序列化与反序列化 三、网络计算器的简单实现 四、网络计算器完整代码 五、代码改进 六、守护进程 七、Json序列化与反序列化 八、netstat 一、再谈协议 是对数据格式和计算机之间交换数据时必须遵守的规则的正式描述。简单的说了&#xff0c;网络…

解决:第一次用python的pip报错

报错内容如下&#xff1a; Fatal error in launcher: Unable to create process using "C:\Users\admin\AppData\Local\Programs\Python\Python312\python.exe" "C:\Program Files\Python\Python312\Scripts\pip.exe" : ??????????? 参考 如何…

强化训练:day4

文章目录 前言1. 简写单词1.1 题目描述1.2 解题思路1.3 代码实现 2. dd爱框框2.1 题目描述2.2 解题思路2.3 代码实现 3. 除2&#xff01;3.1 题目描述3.2 解题思路3.3 代码实现 总结 前言 今天的题目是&#xff1a;BC149 简写单词、dd爱框框、除2&#xff01;&#xff0c;分别涉…

OpenHarmony语言基础类库【@ohos.url (URL字符串解析)】

说明&#xff1a; 本模块首批接口从API version 7开始支持。后续版本的新增接口&#xff0c;采用上角标单独标记接口的起始版本。 导入模块 import Url from ohos.url URLParams9 URLParams接口定义了一些处理URL查询字符串的实用方法。 constructor9 constructor(init?…

ZooKeeper的分布式锁

ZooKeeper的分布式锁机制主要利用ZooKeeper的节点特性&#xff0c;通过创建和删除节点来实现锁的控制。 实现步骤&#xff1a; 创建锁节点&#xff1a;当一个进程需要访问共享资源时&#xff0c;它会在ZooKeeper中创建一个唯一的临时顺序节点作为锁。尝试获取锁&#xff1a;进…

vue+springboot实验个人信息,修改密码,忘记密码功能实现

前端部分 新增Person&#xff08;个人页面&#xff09;&#xff0c;Password&#xff08;修改密码页面&#xff09;&#xff0c;还需要对Manager&#xff0c;login页面进行修改 router文件夹下的index.js&#xff1a; import Vue from vue import VueRouter from vue-router i…