位置: IT常识 - 正文

vue3+ts+MicroApp实战教程

编辑:rootadmin
这篇文章主要介绍了vue3+ts+MicroApp实战教程,分别在主应用项目(main)和子应用(childrenOne,childrenTwo)项目中安装microApp,本文给大家详细讲解,需要的朋友可以参考下 目录

推荐整理分享vue3+ts+MicroApp实战教程,希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:,内容如对您有帮助,希望把文章链接给更多的朋友!

项目准备子项目配置主应用项目配置项目准备

1、基于amin-work-x项目作为原始项目,改造动态菜单为自定义菜单

2、分别在主应用项目(main)和子应用(childrenOne,childrenTwo)项目中安装microApp

npm i @micro-zoe/micro-app --save子项目配置

1,修改子项目mian.ts,添加与基座的交互配置和路由冲突解决

import { createApp } from "vue";import App from "./App.vue";import { Router } from 'vue-router'import router from "./router";import "./utils/router";import ElementPlus from "element-plus";import "element-plus/dist/index.css";import "dayjs/locale/zh-cn";import zhCn from "element-plus/es/locale/lang/zh-cn";import "@/icons/iconfont/iconfont.css";import "@/icons/iconfont/iconfont.js";import "@/styles/main.css";import LayoutStore from "@/layouts";import http from "@/api/http";import { registerComponents } from "./components";import * as Icons from "@element-plus/icons";import pinia from "./store/pinia";import "./setting";declare global {interface Window {microApp: any__MICRO_APP_NAME__: string__MICRO_APP_ENVIRONMENT__: string__MICRO_APP_BASE_ROUTE__: string}}// 与基座进行数据交互function handleMicroData(router: Router) {// 是否是微前端环境if (window.__MICRO_APP_ENVIRONMENT__) {// 监听基座下发的数据变化window.microApp.addDataListener((data: Record<string, unknown>) => {console.log('child-vue3 addDataListener:', data)// 当基座下发path时进行跳转if (data.path && data.path !== router.currentRoute.value.path) {router.push(data.path as string)}})// 向基座发送数据setTimeout(() => {window.microApp.dispatch({ myname: 'tenant-app' })}, 3000)}}/*** 用于解决主应用和子应用都是vue-router4时相互冲突,导致点击浏览器返回按钮,路由错误的问题。* 相关issue:https://github.com/micro-zoe/micro-app/issues/155* 当前vue-router版本:4.0.12*/function fixBugForVueRouter4(router: Router) {// 判断主应用是main-vue3或main-vite,因为这这两个主应用是 vue-router4if (window.__MICRO_APP_ENVIRONMENT__) {//if (window.location.href.includes('/main-vue3') || window.location.href.includes('/main-vite')) {/*** 重要说明:* 1、这里主应用下发的基础路由为:`/main-xxx/app-vue3`,其中 `/main-xxx` 是主应用的基础路由,需要去掉,我们只取`/app-vue3`,不同项目根据实际情况调整** 2、realBaseRoute 的值为 `/app-vue3`*/const realBaseRoute = window.__MICRO_APP_BASE_ROUTE__;//.replace(/^\/app-tenant-[^/]+/g, '')router.beforeEach(() => {if (typeof window.history.state?.current === 'string') {window.history.state.current = window.history.state.current.replace(new RegExp(realBaseRoute, 'g'), '')}})router.afterEach(() => {if (typeof window.history.state === 'object') {window.history.state.current = realBaseRoute + (window.history.state.current || '')}})}}const app = createApp(App);Object.keys(Icons).forEach((it) => {app.component(it, (Icons as any)[it]);});registerComponents(app);app.use(LayoutStore, {state: {layoutMode: "ltr",},actions: {onPersonalCenter() {router.push({ path: "/personal", query: { uid: 1 } });},onLogout() {router.replace({ path: "/login", query: { redirect: "/" } }).then(() => {window.location.reload();});},},});app.use(pinia).use(router);app.use(ElementPlus, {locale: zhCn,});app.use(http);app.mount("#app");handleMicroData(router)fixBugForVueRouter4(router)// 监听卸载操作window.addEventListener('unmount', function () {//console.log("r4开始卸载", window.location, window.history, app)app?.unmount()//console.log('微应用child-vue3卸载了')})

2,修改vue.config.js文件,配置publicPath、端口号、允许跨域

3,为保证子应用的路由在主应用中能直接使用,可在每个路由前添加子应用的路由标志

这一步可不操作,如果不添加,则需要在主应用添加菜单或者动态获取菜单时,根据其他标志,为路由手动加上当前子应用的标志,用于判断子应用来源

vue3+ts+MicroApp实战教程

4、修改子应用路由问history模式

const router = createRouter({history: createWebHistory(window.__MICRO_APP_BASE_ROUTE__||process.env.BASE_URL),routes: mapTwoLevelRouter([...constantRoutes, ...asyncRoutes]),});主应用项目配置

1,在layout中添加子应用入口文件(src\layouts\microapp\app-one.vue)

<template><div><micro-appname="appname-one":url="url"baseroute="/app-main":data="microAppData"@created="handleCreate"@beforemount="handleBeforeMount"@mounted="handleMount"@unmount="handleUnmount"@error="handleError"@datachange="handleDataChange"style="height: 100%"></micro-app></div></template><script lang="ts">export default {name: "name-app",data() {return {url:process.env.NODE_ENV === "development"? "http://localhost:4009/app-one": "通过配置获取线上地址",microAppData: { msg: "来自基座的数据" },};},methods: {handleCreate(): void {console.log("child-vue3 创建了");},handleBeforeMount(): void {console.log("child-vue3 即将被渲染");},handleMount(): void {console.log("child-vue3 已经渲染完成");setTimeout(() => {// eslint-disable-next-line @typescript-eslint/ban-ts-comment// @ts-ignorethis.microAppData = { msg: "来自基座的新数据" };}, 2000);},handleUnmount(): void {console.log("child-vue3 卸载了");},handleError(): void {console.log("child-vue3 加载出错了");},handleDataChange(e: CustomEvent): void {console.log("来自子应用 child-vue3 的数据:", e.detail.data);},},};</script><style></style>

2,在主应用中注册子应用路由

子应用的路由第一次指向主应用的layout,第二层指向上面新建的入口文件

3,修改主应用publicPath

此处的publicPath需与app-one中的baseroute保持一致

配置完成后,先后运行两个项目后,在主应用中手动添加一个子应用的的具体页面路由,就可以在主应用中打开子应用了,但是此时子应用的路由表覆盖了主应用。

为解决这个问题,需要在子应用中添加一个非layout布局的空页面,当子应用单独运行时,指向layout布局页面,如果是在微服务中使用,则指向空页面

src\layouts\EmptyLayout.vue

<template><div class="empty-layout"><router-view> </router-view></div></template><style lang="scss" scoped>.empty-layout {height: 100%;}</style>

src\router\index.ts

到此这篇关于vue3+ts+MicroApp实战教程的文章就介绍到这了,更多相关vue3 ts MicroApp内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!

本文链接地址:https://www.jiuchutong.com/zhishi/310383.html 转载请保留说明!

上一篇:js逻辑操作符的介绍(js逻辑表达式)

下一篇:电脑学习网教大家2022年最新WordPress官方微信支付接口设置傻瓜设置教程-OK源码教学(网上学电脑哪个软件好)

  • 公众号想要文章阅读高,需要一个好的标题和能够打动用户内心的文章内容。(公众号想要文章怎么弄)

    公众号想要文章阅读高,需要一个好的标题和能够打动用户内心的文章内容。(公众号想要文章怎么弄)

  • 竞价新手怎样有效屏蔽恶意点击(竞价怎样才能卖出股票)

    竞价新手怎样有效屏蔽恶意点击(竞价怎样才能卖出股票)

  • lx300耳机(lx3相机)(xemalx3耳机)

    lx300耳机(lx3相机)(xemalx3耳机)

  • 荣耀30青春版的屏幕是什么(荣耀30青春版的手机壳和什么通用)

    荣耀30青春版的屏幕是什么(荣耀30青春版的手机壳和什么通用)

  • 苹果11pro反向充电如何打开(苹果11pro反向充电开关怎么设置)

    苹果11pro反向充电如何打开(苹果11pro反向充电开关怎么设置)

  • vivo x6s A电量百分比在哪设置(vivos6手机电量)

    vivo x6s A电量百分比在哪设置(vivos6手机电量)

  • 数据线往下压才能充电(数据线被压扁了怎么办)

    数据线往下压才能充电(数据线被压扁了怎么办)

  • 升级ios13卡在开机页面(苹果升级卡在开机界面)

    升级ios13卡在开机页面(苹果升级卡在开机界面)

  • keep有访问记录吗(keep访问不会有记录吗)

    keep有访问记录吗(keep访问不会有记录吗)

  • qq语音气泡怎么取消(QQ语音气泡怎么换不了)

    qq语音气泡怎么取消(QQ语音气泡怎么换不了)

  • 电脑硬盘坏了里面的东西能恢复吗(电脑硬盘坏了里面的资料可以导出来不)

    电脑硬盘坏了里面的东西能恢复吗(电脑硬盘坏了里面的资料可以导出来不)

  • windows ssd是什么意思(windows—ssd)

    windows ssd是什么意思(windows—ssd)

  • 淘宝的淘气值怎么提升(淘宝的淘气值怎么看)

    淘宝的淘气值怎么提升(淘宝的淘气值怎么看)

  • iPhone11充电口容易松动(苹果11充电口类型)

    iPhone11充电口容易松动(苹果11充电口类型)

  • 天猫中评对商家有什么影响(天猫买家评价多久会显示出来)

    天猫中评对商家有什么影响(天猫买家评价多久会显示出来)

  • 华为原装屏幕和非原装区别(华为原装屏幕和特惠屏)

    华为原装屏幕和非原装区别(华为原装屏幕和特惠屏)

  • 苹果手机没有4g网怎么回事显示E(苹果手机没有4g信号了怎么处理)

    苹果手机没有4g网怎么回事显示E(苹果手机没有4g信号了怎么处理)

  • 手机勿扰模式打电话提示什么(手机勿扰模式打电话)

    手机勿扰模式打电话提示什么(手机勿扰模式打电话)

  • 苹果手机在充电但是没有显示怎么办(苹果手机在充电的时候老是自动重启)

    苹果手机在充电但是没有显示怎么办(苹果手机在充电的时候老是自动重启)

  • qq音乐自动暂停怎么回事(qq音乐自动暂停怎么设置)

    qq音乐自动暂停怎么回事(qq音乐自动暂停怎么设置)

  • 多媒体数据压缩技术分为(多媒体数据压缩采用的基本技术是)

    多媒体数据压缩技术分为(多媒体数据压缩采用的基本技术是)

  • airpods实体店可以换新吗(airpods在实体店买怎么样)

    airpods实体店可以换新吗(airpods在实体店买怎么样)

  • ipad怎么连airpods(ipad怎么连airpods pro2)

    ipad怎么连airpods(ipad怎么连airpods pro2)

  • 用什么手机可以开空调(用什么手机可以看出一个人吗)

    用什么手机可以开空调(用什么手机可以看出一个人吗)

  • 滴滴快车怎么修改目的地(滴滴快车怎么修改起点)

    滴滴快车怎么修改目的地(滴滴快车怎么修改起点)

  • 华为p30是旗舰机吗(华为p系列最新款)

    华为p30是旗舰机吗(华为p系列最新款)

  • 怎么看qq绑定的身份证(怎么看qq绑定的第三方软件)

    怎么看qq绑定的身份证(怎么看qq绑定的第三方软件)

  • MAC系统中各个文件夹详细介绍(mac文本文件)

    MAC系统中各个文件夹详细介绍(mac文本文件)

  • 结转成本时是否含税
  • 开发票系统税号0和o怎么区别
  • 发票章盖金额上去了
  • 房产未竣工如何缴纳房产税
  • 原始凭证丢失如何处理会罚款吗
  • 服务免税销售额
  • 公司预支了然后来报销的帐怎么做?
  • 以前多计提了应付职工薪酬怎么平账?
  • 商业承兑背书后退回怎么办
  • 应返还财政额度是什么科目
  • 代销产品缴纳增值税吗
  • 特许权使用费代扣代缴增值税
  • 公司缴纳电费
  • 在固定资产中
  • 当月工资补扣个税吗
  • 企业购买设备可以税前扣除吗
  • mac与iphone联动
  • 银行认购公司债券的条件
  • 蓝屏代码0xc000000f
  • 企业废业怎样做会计分录
  • php基础
  • typecho安装插件
  • php fopen ftp文件不存在
  • 可以转增资本的有哪些科目
  • 企业收到政府出资款交增值税
  • 哪些可以作为原始凭证
  • 应收账款转让的限制约定
  • 新罕布什尔州的邮政编码
  • 栅格布局实现
  • 房屋所在地的房子怎么查
  • 信托融资放在哪个科目
  • 国税代开普票能作废吗
  • php无限分类实现不实用递归
  • 包装物押金会计科目
  • 现金流量表期初现金余额怎么计算
  • 行政事业单位福利费列支范围及标准2023
  • php定义变量的方法
  • 红字信息表重复开具怎么处理
  • 生产型企业如何退税
  • 银行手续费没有发票要调增吗
  • 机械租赁收入算成本吗
  • 什么公司可以核定企业所得税
  • 以红字冲回
  • 小规模纳税人增值税账务处理
  • 法人在公司账户取钱要纳税么
  • 工程预缴税款的预征税额如何计算
  • 销售商品提供劳务收到的现金占比怎么算
  • 平均净资产是什么意思
  • 被征用的不动产或者动产使用后应当怎样
  • 明细分类账的记账
  • 数据库语言主要有哪几种
  • mysql的innodb和myisam
  • 关于sql的几道小知识
  • win2003安装加载阵列卡驱动
  • sql server数据库恢复
  • ubuntu如何安装
  • macbook air语音功能
  • vrvedp_m.exe是什么
  • linux系统中网络配置文件一般放在
  • w10 2021年更新
  • Win7系统无法安装SQL2000
  • 在linux系统中查看文件的内容命令
  • WIN10系统英文怎么改中文?
  • 安装samba服务器步骤
  • jquery实现分页功能
  • jquery css hover
  • nodemoudles可以复制粘贴别的电脑运行程序吗
  • websocket解决跨域
  • bash脚本加密
  • python set集合取值
  • 图片旋转鼠标键盘怎么弄
  • python列表组成字符串
  • axios异步
  • js获取设备
  • jQuery UI Bootstrap是什么?
  • iframe例子
  • python系统监控
  • 河南二套房契税征收2023标准是多少
  • 为什么医保名字不一样
  • 安徽省税务干部学校
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设