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

  • 华为录屏怎样隐藏白点(华为录屏怎样隐藏白点,软件下载)

    华为录屏怎样隐藏白点(华为录屏怎样隐藏白点,软件下载)

  • 小米10s打字声音在哪里关掉(小米10s打字声音怎么设置)

    小米10s打字声音在哪里关掉(小米10s打字声音怎么设置)

  • steam如何删除自己的动态(steam怎么彻底删除干净)

    steam如何删除自己的动态(steam怎么彻底删除干净)

  • 手机qq如何不显示年龄(手机QQ如何不显示电脑登录)

    手机qq如何不显示年龄(手机QQ如何不显示电脑登录)

  • 如何去掉微博图片水印(如何去掉微博图片)

    如何去掉微博图片水印(如何去掉微博图片)

  • e52680v2相当于i几(e52680v2相当于i几代)

    e52680v2相当于i几(e52680v2相当于i几代)

  • 快手作品换风格影响热门吗(快手作品换风格后多久能恢复)

    快手作品换风格影响热门吗(快手作品换风格后多久能恢复)

  • 抖音在线状态准吗(抖音在线状态准确不准确)

    抖音在线状态准吗(抖音在线状态准确不准确)

  • vivox30发烫(vivo x30发烫)

    vivox30发烫(vivo x30发烫)

  • 拉黑并且删除怎么知道(拉黑并且删除怎么拉回来)

    拉黑并且删除怎么知道(拉黑并且删除怎么拉回来)

  • ipad保修期是从激活开始算吗(ipad保修期是从购买开始算吗)

    ipad保修期是从激活开始算吗(ipad保修期是从购买开始算吗)

  • 小米路由器原始密码多少(小米路由器原始密码在哪里看)

    小米路由器原始密码多少(小米路由器原始密码在哪里看)

  • 网易云tv版哪里下载(网易云音乐tv版叫什么名字)

    网易云tv版哪里下载(网易云音乐tv版叫什么名字)

  • 三十分钟视频如何发送(三十分钟视频如何发送抖音)

    三十分钟视频如何发送(三十分钟视频如何发送抖音)

  • 苹果电脑和普通电脑有什么区别(苹果电脑和普通电脑游戏互通吗)

    苹果电脑和普通电脑有什么区别(苹果电脑和普通电脑游戏互通吗)

  • 华为手机怎么设置卡2上网(华为手机怎么设置下面的三个功能键)

    华为手机怎么设置卡2上网(华为手机怎么设置下面的三个功能键)

  • 微信与我相关在哪里(微信与我相关在哪里看)

    微信与我相关在哪里(微信与我相关在哪里看)

  • word默认行距有几种(word2013行间距默认值)

    word默认行距有几种(word2013行间距默认值)

  • ip地址由几个字节构成(ip地址由几个字节二进制数组成)

    ip地址由几个字节构成(ip地址由几个字节二进制数组成)

  • 京享值150还能恢复吗(京享值100还有救吗)

    京享值150还能恢复吗(京享值100还有救吗)

  • 微信文件过期怎么恢复(微信文件过期怎么打开)

    微信文件过期怎么恢复(微信文件过期怎么打开)

  • 小米6x支持多少瓦闪充(小米6x支持多少hz刷新率)

    小米6x支持多少瓦闪充(小米6x支持多少hz刷新率)

  • 华为mate30隔空设置(华为手机mate30隔空操作功能怎样找)

    华为mate30隔空设置(华为手机mate30隔空操作功能怎样找)

  • 嘀嗒出行咋解封(嘀嗒出行咋解封账号)

    嘀嗒出行咋解封(嘀嗒出行咋解封账号)

  • 16d57是什么型号(16d57是什么版本)

    16d57是什么型号(16d57是什么版本)

  • iphone 8有没有红外线(苹果8有红色的配色吗)

    iphone 8有没有红外线(苹果8有红色的配色吗)

  • Word2Vec【附代码】(word2vec使用方法)

    Word2Vec【附代码】(word2vec使用方法)

  • 购房返现金需要什么资料
  • 投资者减除费用和工资薪金减除费用
  • 赠送的产品价格为0怎么入库
  • 专项附加扣除项目的6项具体规定有哪些
  • 企业商品收入确认的依据
  • 跨越发票冲红,填了红字信息表,没有负数发票
  • 代订机票服务费可以抵扣进项吗
  • 销售退货时发票已认证怎么办
  • 成本少结转了怎么调回
  • 法人向企业注资有风险吗
  • 纳税申报成功
  • 外出施工安装的公司发工资怎么记账?
  • 社保的计提缴纳分录怎么写
  • 代理进口一般几个点费用
  • 个体工商户地税没有申报罚款多少
  • 2021虚开发票案例
  • 普通发票商品名称错了一个字
  • 增值税 3万
  • 采用支付手续费方式委托代销商品
  • 折旧率通俗理解
  • 多交企业所得税怎么申请抵缴
  • 罕见病药品进口要求
  • 年底公司抵税
  • 会计监督作用
  • openlayers加载geojson
  • AquariumDesktop.exe进程危险吗 AquariumDesktop是什么进程
  • 销售收入的暂估入账
  • 公司收到个人入股资金要交税吗
  • 安置残疾人就业单位城镇土地使用税
  • 外贸企业申报出口退税的期限
  • 房地产预售收入如何缴纳所得税
  • 免费镜像翻转软件
  • 销售自己使用过的固定资产
  • 申请减免费用的报告格式
  • 异步函数执行顺序
  • php aes加密解密
  • 出口货物视同内销征税的会计核算?
  • 职工教育经费具体比例
  • 从财务报表中能看出什么
  • 计提基建借款利息会计分录
  • 电子发票自己打印黑白有效吗
  • 外贸企业应交税费计入
  • 法人购买车险发票在哪开
  • 当月发生业务下月开票如何做账
  • 用白纸写的收据怎么入帐?
  • 票面利率大于市场利率,则发行价格一定( )面值
  • 返利开红字发票怎么做账
  • 存货的进口关税计入成本吗
  • 怎么理解核销
  • 申报财产租赁合同怎么写
  • 研发支出的定义
  • 应付职工薪酬为负数什么意思
  • 银行存款日记账电子表格模板
  • 常见ui
  • 房地产企业会计核算和税务处理大全
  • vmware_vmx.exe进程在哪里关
  • ubuntu做lvm
  • centos7.5切换图形界面
  • 手把手教你安装使用国家反诈中心
  • 苹果电脑怎么下魔兽争霸
  • windows 10预览版
  • win7系统怎么设置桌面便签
  • linux we
  • linuxvim编辑器的用法
  • opengl 输入框
  • 基于个人同意处理个人信息的个人什么撤回其同意
  • 示例代码
  • node.js环境搭建
  • android如何导入文件
  • 如何做批处理命令
  • cocos2djs
  • linux脚本case
  • boostrapping
  • 怎么利用python爬虫爬数据
  • js 显示当前时间
  • 浅谈一下新冠的好处
  • unity3d颜色
  • activity启动原理
  • 国家税务总局两江新区税务局
  • 季度财务会计报告怎么写
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设