位置: 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源码教学(网上学电脑哪个软件好)

  • 海尔燃气热水器e1是什么故障原因(海尔燃气热水器显示e1)

    海尔燃气热水器e1是什么故障原因(海尔燃气热水器显示e1)

  • 苹果关机怎么查找定位手机(苹果关机怎么查定位)

    苹果关机怎么查找定位手机(苹果关机怎么查定位)

  • vivos6用的是什么处理器(vivos6好不好用)

    vivos6用的是什么处理器(vivos6好不好用)

  • 为什么表格打印预览一部分没有(为什么表格打印出来是歪的)

    为什么表格打印预览一部分没有(为什么表格打印出来是歪的)

  • 小米手机充电接口类型(小米手机充电接口坏了怎么修)

    小米手机充电接口类型(小米手机充电接口坏了怎么修)

  • 为什么qq没有k歌红包(qq为什么没有唱歌红包了)

    为什么qq没有k歌红包(qq为什么没有唱歌红包了)

  • p40pro什么时候上市(p40pro什么时候出)

    p40pro什么时候上市(p40pro什么时候出)

  • 文字怎么换行(cad文字怎么换行)

    文字怎么换行(cad文字怎么换行)

  • 淘宝怎么设置无品牌(淘宝怎么设置无实物发货)

    淘宝怎么设置无品牌(淘宝怎么设置无实物发货)

  • qq显示忙碌对方在干嘛(qq显示忙碌是在跟别人聊吗)

    qq显示忙碌对方在干嘛(qq显示忙碌是在跟别人聊吗)

  • 键盘打不出字怎么办(键盘打不出字怎么回事按哪个键)

    键盘打不出字怎么办(键盘打不出字怎么回事按哪个键)

  • 怎么验证网站是否支持ipv6访问(怎么验证网站是不是钓鱼网站)

    怎么验证网站是否支持ipv6访问(怎么验证网站是不是钓鱼网站)

  • 杜比和imax的区别(imax和杜比影院)

    杜比和imax的区别(imax和杜比影院)

  • 手机卡能用多少年(手机卡能用多少年不用)

    手机卡能用多少年(手机卡能用多少年不用)

  • ipad能安装万能钥匙吗(ipad可以下载万能wifi吗)

    ipad能安装万能钥匙吗(ipad可以下载万能wifi吗)

  • 在电脑上下载歌曲到u盘怎么下(在电脑上下载歌曲到mp3)

    在电脑上下载歌曲到u盘怎么下(在电脑上下载歌曲到mp3)

  • 抖音上传视频怎么加速(抖音上传视频怎么赚钱)

    抖音上传视频怎么加速(抖音上传视频怎么赚钱)

  • wps文字怎么画表格(wps文字怎么画图)

    wps文字怎么画表格(wps文字怎么画图)

  • vivo手机设置sos(vivo手机设置搜索不到gms)

    vivo手机设置sos(vivo手机设置搜索不到gms)

  • 手机的系统相册在哪里 (手机的系统相册在什么位置苹果)

    手机的系统相册在哪里 (手机的系统相册在什么位置苹果)

  • 华为frdal10是什么型号(华为frdal10手机报价)

    华为frdal10是什么型号(华为frdal10手机报价)

  • 特征提取技术包括哪些(特征提取技术工作原理)

    特征提取技术包括哪些(特征提取技术工作原理)

  • 手机加入黑名单打电话会怎么说(手机加入黑名单后对方发信息显示什么)

    手机加入黑名单打电话会怎么说(手机加入黑名单后对方发信息显示什么)

  • 美团好评怎么写(奶茶美团好评怎么写)

    美团好评怎么写(奶茶美团好评怎么写)

  • 华硕开不了机按哪个键(华硕开不了机按什么键进入安全模式)

    华硕开不了机按哪个键(华硕开不了机按什么键进入安全模式)

  • 最早的三防手机(三防手机厂商)

    最早的三防手机(三防手机厂商)

  • JS 生成条形码(一维码)jsBarcode(js生成条形码的方式有哪些)

    JS 生成条形码(一维码)jsBarcode(js生成条形码的方式有哪些)

  • 管理费用不计入成本吗?
  • 小规模纳税人不动产租赁税率
  • 建筑公司办公室照片真实
  • 增值税17-16-13的时间
  • 二级分支机构不具有主体生产经营职能
  • 所得税年报工资薪金支出怎么填
  • 一般纳税人加计抵减申报表怎么填
  • 2021小规模纳税人减免增值税
  • 在建工程是资产
  • 企业所得税从业人数包括临时工吗
  • 个体小规模一般纳税人税率多少
  • 成品油购进数据未同步怎么办
  • 建筑业工人工资保障
  • 错账的查找方法及适用范围
  • 白条入账的会计分录
  • 溢价发行债券的发行价格怎么计算的
  • 短期借款的利息会计分录怎么写
  • 跨行业能开发票吗
  • 简易办法征收一般纳税人开票税率
  • 增值税发票备注栏怎么填写
  • 年薪制离职补偿金如何计算?
  • 待处理财产损益科目
  • 小规模企业超过500万营业额
  • 工会经费的计税基础
  • 什么叫变动费用
  • 公司收到个人借款的现金流量
  • 应收账款周转次数计算方法
  • 餐饮定额发票怎么征税
  • 偿还借款利息是现金流量什么项目
  • win10预安装环境
  • service5.exe - service5是什么进程 有什么用
  • php字符串赋值
  • 长期借款的主要原因
  • 违约金赔偿款怎么开票
  • 收到对方退回的现金
  • phpcms默认密码
  • 办营业执照怎么填写经营范围
  • centos7源码包安装
  • 公司购买法拍房需要交什么费
  • 印花税报少了交税了怎么办
  • 党组织工作经费税前扣除
  • sql中判断函数
  • 完全删除sql server2012
  • 文化事业建设费会计分录
  • 出口企业有哪些税收
  • 收到专利权投资的票据
  • 电子承兑汇票做账看哪个日期
  • 新车一次能开多少时间
  • 工厂不开票怎么办
  • 房地产企业资产负债率的正常范围
  • win7系统宽带连接
  • linux系统怎样安装
  • 电脑右下角windows设置在哪
  • win7系统屏幕键盘怎么打开
  • xp停在windows界面
  • 苹果电脑截图快捷键
  • ubuntu写脚本
  • xp系统电源设置在哪里
  • win10清理系统盘垃圾
  • win7系统的桌面图标怎么调出来
  • windows10粘滞键
  • win7系统安装软件乱码
  • win10开机显示recover
  • win10不支持win7软件怎么办
  • android:Fragment动画那点事
  • java dao框架
  • nodejs word
  • 禁止指定qq号登录怎么弄
  • windows批处理命令教程
  • 如何编写一个完整的教学目标
  • find 批处理
  • shell脚本实现文件移动、复制等操作
  • 获取手机信息的渠道
  • js倒计时算法
  • 核准类结算账户包括
  • 企业代缴房产税可以入账吗
  • 宁波国税局几点上班几点下班
  • 企业出租房产的税收优惠政策
  • 南通开发区地图高清版
  • 地方文化包括哪几种
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设