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

  • 缘来缘去(缘来缘去缘如水下一句)

    缘来缘去(缘来缘去缘如水下一句)

  • 微信怎么添加孩子的医保电子凭证(微信里怎么添加孩子的医保卡)

    微信怎么添加孩子的医保电子凭证(微信里怎么添加孩子的医保卡)

  • 荣耀x10有智慧分屏和侧边栏的吗(荣耀x10智慧视觉怎样开启)

    荣耀x10有智慧分屏和侧边栏的吗(荣耀x10智慧视觉怎样开启)

  • 怎样解除微信隐私设置(怎样解除微信隐私密码)

    怎样解除微信隐私设置(怎样解除微信隐私密码)

  • 抖音钻卡怎么集齐(抖音里的抖音钻卡怎么集)

    抖音钻卡怎么集齐(抖音里的抖音钻卡怎么集)

  • 怎样解封拼多多黑户(怎样解封拼多多上的银行卡)

    怎样解封拼多多黑户(怎样解封拼多多上的银行卡)

  • 快手申请仲裁是什么意思(快手退款申请仲裁会被退款吗)

    快手申请仲裁是什么意思(快手退款申请仲裁会被退款吗)

  • 荣耀x10发布会几点开始(荣耀x10发布会内容)

    荣耀x10发布会几点开始(荣耀x10发布会内容)

  • 微信群删了应该怎么恢复(删除微信群还能恢复吗)

    微信群删了应该怎么恢复(删除微信群还能恢复吗)

  • 喜马拉雅为什么听着听着就断开了(喜马拉雅为什么播放不了)

    喜马拉雅为什么听着听着就断开了(喜马拉雅为什么播放不了)

  • 1080p是高清还是标清(1080p是高清还是全高清)

    1080p是高清还是标清(1080p是高清还是全高清)

  • 拇信能取代微信吗(拇信app可以投资吗?)

    拇信能取代微信吗(拇信app可以投资吗?)

  • 手机相机拍不了照片怎么回事(手机相机拍不了照)

    手机相机拍不了照片怎么回事(手机相机拍不了照)

  • 华为hilink是什么意思(huawei hilink)

    华为hilink是什么意思(huawei hilink)

  • 苹果7加减音量键失灵(苹果加减音量键上面那个是什么)

    苹果7加减音量键失灵(苹果加减音量键上面那个是什么)

  • 快手保证金能退吗(快手保证金能退微信吗)

    快手保证金能退吗(快手保证金能退微信吗)

  • excel名字两个字和三个字对齐(excel名字两个字中间加空格)

    excel名字两个字和三个字对齐(excel名字两个字中间加空格)

  • 苹果8指纹老是不灵(苹果8指纹老是不灵敏)

    苹果8指纹老是不灵(苹果8指纹老是不灵敏)

  • 美版xs支持双卡吗(美版xs是单卡还是双卡)

    美版xs支持双卡吗(美版xs是单卡还是双卡)

  • oppor9应用加密在哪里取消(oppor9手机应用加密)

    oppor9应用加密在哪里取消(oppor9手机应用加密)

  • 天猫延迟发货被投诉对店铺会有影响吗(天猫延迟发货罚款多少)

    天猫延迟发货被投诉对店铺会有影响吗(天猫延迟发货罚款多少)

  • xr双卡信号差解决办法(xr双卡 信号)

    xr双卡信号差解决办法(xr双卡 信号)

  • 爱奇艺看电视频道在哪(爱奇艺看电视频道没反应)

    爱奇艺看电视频道在哪(爱奇艺看电视频道没反应)

  • 腾讯会员怎么共享给别人用(腾讯会员怎么共享账号)

    腾讯会员怎么共享给别人用(腾讯会员怎么共享账号)

  • 一加6t语音助手在哪(一加六t语音助手怎么召唤)

    一加6t语音助手在哪(一加六t语音助手怎么召唤)

  • 数组公式怎么输入(数组公式用法)

    数组公式怎么输入(数组公式用法)

  • 抖音多少赞可以发长视频(抖音多少赞可以带货)

    抖音多少赞可以发长视频(抖音多少赞可以带货)

  • dmxlauncher.exe进程是病毒吗 危险吗 dmxlauncher进程信息查询(dmc32.dll)

    dmxlauncher.exe进程是病毒吗 危险吗 dmxlauncher进程信息查询(dmc32.dll)

  • vue中记录滚动条位置(vue 滚动条)

    vue中记录滚动条位置(vue 滚动条)

  • 中税协是什么意思
  • 小规模拍卖公司差额征税
  • 不含税买货合法吗
  • 核定征收企业股权转让的个人所得税
  • 本期进项税大于销项税
  • 企业年金也需要缴纳吗
  • 结转无形资产账面价值
  • 应交税金进项税的会计分录
  • 房地产公司苗木账务处理
  • 没有进货票的商品可以销售吗
  • 当月确认收入下月开票
  • 复利现值是什么意思
  • 2014年税收征管体制改革
  • 开票软件服务费不交会怎么样
  • 当月取得的进项必须当月勾选吗
  • 企业增值税年底怎么结转
  • 劳务发票属地原则
  • 企业所得税减半征收计算公式
  • 免税发票不用纳税可以吗
  • 应交税费包括了增值税吗
  • 个体户需要申报工资薪金吗
  • 支付教育培训费
  • 公司与股东的往来款现金流量表
  • 收到外币货款账务处理
  • 个人股权转给公司要交个税吗
  • 收回借支款的账务处理
  • 收到上级工会下拨的工会经费
  • 装修公司开专票要交几个点
  • 塞维利亚是港口吗?
  • PHP:curl_multi_info_read()的用法_cURL函数
  • hbuilder怎么下载
  • php 操作mysql
  • 有哪些常见的不可数名词英语
  • 业务招待费会计分录
  • 关于php中的各种循环说法正确的是
  • vscode怎么运行前端
  • php中的正则表达式怎么使用
  • php实现购物车功能
  • 缴纳残保金会计分录最新
  • 固定资产处置缴纳增值税政策依据
  • 新公司有免税政策吗
  • 出口信用保险补贴是否不征税收入
  • 代建工程开发成本核算应设置的会计科目是( )
  • 劳务费不足800如何入账
  • 长期股权投资核算的成本法与权益法的主要差别有哪些
  • sqlserver2008数据库定时备份
  • 现金日记账一般采用什么格式
  • 低值易耗品如何摊销
  • 实物投资入股
  • 个人所得税中的速算扣除数是什么意思
  • 销售金银首饰增值税和企业所得税
  • 用友反结账怎么操作
  • 防伪税控服务费全额抵扣申报表怎么填
  • 库存商品调价会计分录
  • 结转后还可以改凭证吗
  • 改良设备的入账价值
  • 账面净值什么意思
  • 专票的发票金额是价税总额吗
  • 工程发票可以抵扣增值税吗
  • 往来账清账
  • 现金支票办理电话
  • MySql 5.6.14 winx64配置方法(免安装版)
  • win7断电后无法启动
  • winxp密码忘了
  • 不接入局域网更新
  • windows2003远程连接
  • freebsd挂载ntfs
  • 戴尔笔记本电脑开不了机
  • win7电脑磁盘空间不足清理步骤
  • dell power manager是什么
  • centos时间不同步的解决方法(centos时间同步)
  • Win10 UWP红石版应用商店迎来更新:查找更新再换位置
  • 如何解决在沟通中产生的漏斗效应
  • SDK不兼容Ubuntu64位系统的解决办法!!!
  • 自动重启服务脚本
  • linux定时备份文件
  • 深入探讨换个说法怎么说
  • android 多页面
  • 重庆电子税务局网页版登录
  • 越南入关要给小费吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设