位置: IT常识 - 正文

vue3+ts+MicroApp实战教程

发布时间:2024-01-26
这篇文章主要介绍了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源码教学(网上学电脑哪个软件好)

  • 点击率影响网站关键词优化排名(点击率影响网站访问量吗)

    点击率影响网站关键词优化排名(点击率影响网站访问量吗)

  • 怎么把淘宝里面的退款记录删除(怎么把淘宝里面的消消乐删除)

    怎么把淘宝里面的退款记录删除(怎么把淘宝里面的消消乐删除)

  • 扩列聊天的人怎么找回来(扩列聊些什么)

    扩列聊天的人怎么找回来(扩列聊些什么)

  • iphone拍照黑点修复(iphone手机拍照有黑点 固定不动)

    iphone拍照黑点修复(iphone手机拍照有黑点 固定不动)

  • oppo手机卸载软件在哪里能找到(oppo手机卸载软件显示桌面已锁定)

    oppo手机卸载软件在哪里能找到(oppo手机卸载软件显示桌面已锁定)

  • 华为nova5pro视频美颜怎么设置(华为nova5pro视频帧数)

    华为nova5pro视频美颜怎么设置(华为nova5pro视频帧数)

  • 手机安全补丁级别日期是什么意思(手机安全补丁级别是什么意思)

    手机安全补丁级别日期是什么意思(手机安全补丁级别是什么意思)

  • oppo手机无故黑屏开不了机(oppo手机无故黑屏)

    oppo手机无故黑屏开不了机(oppo手机无故黑屏)

  • 牛听听充不进去电怎么办(牛听听官网 为啥充电充不了)

    牛听听充不进去电怎么办(牛听听官网 为啥充电充不了)

  • 号码已过期是什么情况(号码已过期是什么原因)

    号码已过期是什么情况(号码已过期是什么原因)

  • 表格怎么清除不要的线(如何清除表格中的内容而且不会清除表格格式)

    表格怎么清除不要的线(如何清除表格中的内容而且不会清除表格格式)

  • dpi信息异常,可将图片另存什么意思(dpi信息异常是什么意思)

    dpi信息异常,可将图片另存什么意思(dpi信息异常是什么意思)

  • 淘宝商家能看到顾客的个人信息吗(淘宝商家能看到买家的退货率吗)

    淘宝商家能看到顾客的个人信息吗(淘宝商家能看到买家的退货率吗)

  • 苹果11组装机和原装机的区别(苹果11组装机和原装机有什么区别)

    苹果11组装机和原装机的区别(苹果11组装机和原装机有什么区别)

  • 关闭超线程可以提升单核性能吗(关闭超线程可以提升降低功耗吗)

    关闭超线程可以提升单核性能吗(关闭超线程可以提升降低功耗吗)

  • 苹果x能升级13.3系统吗(苹果X能升级吗)

    苹果x能升级13.3系统吗(苹果X能升级吗)

  • 打开剪映为什么显示网络异常(打开剪映为什么找不到了图片了)

    打开剪映为什么显示网络异常(打开剪映为什么找不到了图片了)

  • 苹果售后中心给验机吗(苹果售后中心给退货吗)

    苹果售后中心给验机吗(苹果售后中心给退货吗)

  • 淘宝退货时间最长多久(淘宝退货最迟多少天)

    淘宝退货时间最长多久(淘宝退货最迟多少天)

  • 极米和小米什么关系(极米和米家什么关系)

    极米和小米什么关系(极米和米家什么关系)

  • 我的流量怎么送给别人(流量有没有办法赠送)

    我的流量怎么送给别人(流量有没有办法赠送)

  • QQ邮箱怎么注册(qq邮箱怎么注册手机号邮箱)

    QQ邮箱怎么注册(qq邮箱怎么注册手机号邮箱)

  • 计算机原理基础知识(计算机原理基础实训总结200字)

    计算机原理基础知识(计算机原理基础实训总结200字)

  • Win11新工具:轻轻松松帮你安装任何安卓 APK 应用(windows10轻松使用是什么)

    Win11新工具:轻轻松松帮你安装任何安卓 APK 应用(windows10轻松使用是什么)

  • 最高超频记录的CPU是什么(最强超频)

    最高超频记录的CPU是什么(最强超频)

  • WebSocket(websocket怎么读)

    WebSocket(websocket怎么读)

  • 递延所得税负债计算公式
  • 印花税的纳税人是买方还是卖方
  • 建筑企业可以挂靠吗
  • 缴纳城镇土地使用税
  • 现金存银行会计分录
  • 进销存工作流程
  • 个别计价法和先进先出法举例
  • 企业所得税季度申报填写示例
  • 劳务成本科目
  • 企业购置节能节水专用设备
  • 小规模建筑公司预缴增值税
  • 租地协调费没发票怎么入账?
  • 预收电费结转成本怎么办
  • 期初建账以前年度损益调整怎么转?
  • 事业单位购入三年期国债的会计分录怎么做?
  • 公司出差是自己先垫付再报账吗
  • 现金收据为什么也在自制原始凭证的范畴呢?
  • 百旺红字发票申领流程
  • 卷式发票属于什么税
  • 房屋修缮费交增值税吗
  • 对公银行转账给私卡做备用金应怎样做分录?
  • 母子公司之间支付的租赁费可以税前扣除么
  • 代开发票预缴的增值税能否申请退税
  • 公司营业收入证明怎么开
  • 在linux系统中拥有
  • 蜡梅的养殖方法视频
  • 企业弥补亏损明细表
  • 小微企业免征增值税政策2023
  • 房地产公司收到预售款缴纳印花税吗
  • 发行通告
  • require.context()的用法详解
  • 给员工报销
  • 手撕代码题目集锦
  • 前端大佬都有谁
  • 网易游戏二面
  • 工资的会计账务处理
  • 信息技术服务费税收编码
  • 建设项目财务费用包括
  • 不能加计扣除的研发费用在辅助账怎么反映
  • 织梦如何使用
  • python中的logging记录日志
  • 房产增值税计税依据及计算方式
  • 增值税申报表第18栏怎么来的
  • 交通费 抵扣
  • 增值税会计账务处理例题
  • SQL设置外键
  • 有限合伙企业分红原则
  • 无发票费用可以入账吗
  • 金三税务系统怎样修改财务人员跟办税人?
  • 个人社保代扣业务是什么意思
  • 存货期末成本的计量
  • 长期待摊费用如何做账
  • 修改mysql配置的两种方法
  • sqlserver2000删除注册表
  • Win10 Build 10565 Edge浏览器更新日志和已知问题
  • fedora soas
  • wlltweak.exe
  • win10系统打不开控制面板
  • macbookzen
  • mac登录apple id一直转圈
  • canvas画心形
  • debug命令及其基本操作
  • css控制图片置灰
  • opengl api version
  • javascript基于
  • android 基础
  • javascript的判断语句
  • unity怎么加人
  • android开发详解
  • node.js promise
  • Android开发工具
  • unity保存项目
  • pass python用法
  • javascript基础入门视频教程
  • 村委会税务登记流程
  • 香港企业查询系统
  • 组织生活会有民族评议党员大会会后报告
  • 河南省税务总局网站官网
  • 已经开票的房子还能退吗
  • 增值税电子专用发票如何进行冲红处理
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号