当前位置: 首页 > news >正文

qiankun微前端任意位置子应用

qiankun微前端任意位置子应用

  • 主项目
    • 1、安装qiankun
    • 2、引入注册
    • 3、路由创建
    • 4、路由守卫
  • 二、子项目
    • 1、安装@sh-winter/vite-plugin-qiankun
    • 2、main.js配置
    • 3、vite.config.js配置
  • 三、问题解决

主项目

1、安装qiankun

npm i qiankun -S

2、引入注册

创建存放子应用页面

//whpvue.vue文件
<template><div style="height: 800px;"><div id="whpvue">该项目未启动,请联系管理员!</div></div>
</template>
<script setup lang="ts">
import { loadMicroApp } from 'qiankun';
import { onMounted } from 'vue';
onMounted(() => {let loadAppRef: any = null;console.log('loadApp:', loadAppRef);if (loadAppRef?.current) {//加上判断,避免多次创建loadAppRef.current.unmount();}let app = {name: 'whpvue', //子项目名称entry: 'http://localhost:81/whpvue', // 子项目地址container: '#whpvue', // 在主项目中配置子项目将要显示的位置节点activeRule: '/whpvue', //激活规则,可以通过设置不同的路由进行激活props: {mainAppMethod: (params) => {console.log('主应用方法被调用', params);},refreshPage() {//子应用回到主应用时需要用到更新路由的方法window.location.href = '/';}} //传参       //子项目 主项目传参的通道};loadAppRef.current = loadMicroApp(app);
});
</script>

3、路由创建

在主应用中需要对子应用的路由进行配置

 // 子应用配置{path: '/whpvue/index',component: () => import('@/views/whpvue.vue'),hidden: true},//当在子应用中刷新页面的时候会重定向到子应用页面,这个很关键{path: '/whpvue/:pathMatch(.*)*',component: () => import('@/views/whpvue.vue'),hidden: true},

4、路由守卫

这个也很关键

//main.ts
router.beforeEach((to, from: any, next) => {console.log(to, 40);if (Object.keys(from).includes('href') && from?.href.indexOf('/whpvue') > -1 && to.name == 'Index') {// 从子应用过来的// 手动调用返回方法吧(window as any).backMain();}next();
});

二、子项目

子项目往往都是可以独立运行的,所以动的越少越好

1、安装@sh-winter/vite-plugin-qiankun

npm i @sh-winter/vite-plugin-qiankun

2、main.js配置

  • Vue3.x
import './assets/main.css'
import { createApp } from 'vue'
import App from './App.vue'import { exportLifeCycleHooks, qiankunWindow } from '@sh-winter/vite-plugin-qiankun/dist/helper'
function render() {const app = createApp(App)app.mount('#app1') //此处的id和html中一致,最好不要与主项目的一致,以免冲突
}
exportLifeCycleHooks({bootstrap() {// do nothing.},mount(props) {render(props.container);},unmount() {app?.unmount();}
})
if (!qiankunWindow.__POWERED_BY_QIANKUN__) {render();
}

3、vite.config.js配置

  • Vue3.x
import {qiankunPlugin, transformAssetUrl } from '@sh-winter/vite-plugin-qiankun'
import { name as packageName } from './package.json'
export default defineConfig({base: `/${packageName}/`,plugins: [vue({template: {compilerOptions: {nodeTransforms: [transformAssetUrl]}}}),qiankunPlugin({ packageName })  //这里要看.env.development中的配置],resolve: {alias: {'@': fileURLToPath(new URL('./src', import.meta.url))}},})

三、问题解决

1、可能出现报错信息:
在这里插入图片描述
问题分析:一般实在网络较慢的时候出现,意思就是还没有加载好没法显示
问题解决:使用v-if绑定子项目显示的位置,在mounted后进行显示即可
2、路由配置一定要注意,如果页面加载有问题,多数是路由问题
3、背景图片不展示,地址获取错误:需要将@/assets改成…/的形式,或者将背景图片换成img图片吧

相关文章:

  • 工业与协议融合篇:如何将多个协议集成进一个系统?
  • 从韦斯利・卡普洛看北斗星咨询公司的技术咨询引领之路
  • 分布式ID设计 数据库主键自增
  • 智慧校园安全可视化指挥调度系统解决方案
  • Java设计模式之建造者模式:从入门到精通
  • 基于Java和GeoTools的根据矢量BBOx自动生成格网文件实践
  • WPF内嵌其他进程的窗口
  • 深入解析WPF中的3D图形编程:材质与光照
  • PostgreSQL技术大讲堂 - 第89讲:重讲数据库完全恢复
  • zst-2001 历年真题 设计模式
  • 227. 基本计算器 II
  • Java 原生实现代码沙箱(OJ判题系统第1期)——设计思路、实现步骤、代码实现
  • 线段树:数据结构中的超级英雄
  • 检查当前 Docker 使用的 默认运行时(default runtime)方法
  • LeetCode-双指针-盛最多水的容器
  • 部署Superset BI(四)连接sql server数据库
  • MSF 生成不同的木马 msfvenom 框架命令
  • uniapp跨平台开发HarmonyOS NEXT应用初体验
  • 纯净IP,跨境账号稳定的底层逻辑
  • git做commit信息时的校验
  • AI药企英矽智能第三次递表港交所:去年亏损超1700万美元,收入多数来自对外授权
  • 央行:货币与物价的关系受多重因素影响,提振物价的关键在于扩大有效需求
  • 中国一重集团有限公司副总经理陆文俊被查
  • “20后”比“60后”更容易遭遇极端气候事件
  • 金融监管局:已设立74支私募股权投资基金,支持投资科技创新企业
  • 不主动上门检查,上海已制定14个细分领域“企业白名单”甄别规则