qiankun框架Vue3子应用(webpack)

您所在的位置:网站首页 iframe应用场景 qiankun框架Vue3子应用(webpack)

qiankun框架Vue3子应用(webpack)

2023-05-13 22:34| 来源: 网络整理| 查看: 265

核心逻辑

判断是否在乾坤框架中 否安装正常方式挂载 是不进行app挂载,而是通过乾坤暴露的mount方法挂载 main.ts文件 import { createApp } from 'vue' import App from './App.vue' import routes from './router' import { createRouter, createWebHashHistory } from 'vue-router' import './public-path.js' export { mount, unmount, bootstrap } from './qiankun' if (!(window as any).__POWERED_BY_QIANKUN__) { const router = createRouter({ history: createWebHashHistory(), routes }) createApp(App).use(router).mount('#app') } qiankun.ts import { RouterHistory, createRouter, createWebHashHistory } from 'vue-router' import { App, inject, InjectionKey, createApp } from 'vue' import routes from './router' import MainApp from './App.vue' let history: RouterHistory | null = null let app: any = null interface IGlobalState { setGlobalState: (state: Record)=> void onGlobalStateChange: (func: (state: Record, prev: Record)=> void)=> void offGlobalStateChange: () => boolean } export const GlobalStateKey: InjectionKey = Symbol('') // 全局调用乾坤框架消息方便进行消息传递 const createGlobalState = (props: any) => { const globalState = { install (app: App) { app.config.globalProperties.$globalState = props app.provide(GlobalStateKey, props) } } return globalState } // vue3 use const useGlobalState = () => { // eslint-disable-next-line @typescript-eslint/no-non-null-assertion return inject(GlobalStateKey)! } /** * 应用每次进入都会调用 mount 方法,通常我们在这里触发应用的渲染方法 */ const mount = async (props: any) => { const { container } = props history = createWebHashHistory('/meeting/') const router = createRouter({ history, routes }) app = createApp(MainApp) app.use(router).use(createGlobalState(props)).mount(container.querySelector('#app')) } /** * 应用每次 切出/卸载 会调用的方法,通常在这里我们会卸载微应用的应用实例 */ const unmount = async () => { app.unmount() if (history) { history.destroy() } } // bootstrap 只会在微应用初始化的时候调用一次,下次微应用重新进入时会直接调用 mount 钩子,不会再重复触发 bootstrap。 // 通常我们可以在这里做一些全局变量的初始化,比如不会在 unmount 阶段被销毁的应用级别的缓存等。 const bootstrap = async () => { console.log('%c%s', 'color: green;', 'vue3.0 app bootstrap') } /** * 可选生命周期钩子,仅使用 loadMicroApp 方式加载微应用时生效 */ const update = async (props: any) => { console.log('update props', props) } export { mount, unmount, bootstrap, update, useGlobalState }

主应用:https://www.jianshu.com/p/48d74801b4c4 子应用链接:https://www.jianshu.com/p/6c3feb4c1062 vite子应用:https://www.jianshu.com/p/d364e6621b63



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3