主子应用样式冲突模板
This commit is contained in:
41
src/main.js
41
src/main.js
@@ -6,36 +6,57 @@ let app = null
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 挂载 Vue 实例
|
* 挂载 Vue 实例
|
||||||
* 微前端环境下由主应用通过 window.mount() 调用
|
* - 微前端环境:由主应用通过 window['micro-app-xxx'].mount() 调用
|
||||||
* 独立运行时直接调用
|
* - 独立运行:直接调用
|
||||||
*/
|
*/
|
||||||
function mount() {
|
function mount() {
|
||||||
if (app) return // 防止重复挂载
|
// 防止重复挂载(keepAlive 恢复时可能重复触发)
|
||||||
|
if (app) {
|
||||||
|
console.warn('[my-vue2-app] 已经挂载,跳过重复 mount')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
app = new Vue({
|
app = new Vue({
|
||||||
router,
|
router,
|
||||||
render: h => h(App)
|
render: h => h(App)
|
||||||
}).$mount('#app')
|
}).$mount('#app')
|
||||||
|
|
||||||
|
console.log('[my-vue2-app] 子应用已挂载')
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 卸载 Vue 实例
|
* 卸载 Vue 实例
|
||||||
* 微前端 keepAlive 切换时由主应用通过 window.unmount() 调用
|
* - 微前端环境:主应用 keepAlive 切换路由时调用
|
||||||
*/
|
*/
|
||||||
function unmount() {
|
function unmount() {
|
||||||
if (app) {
|
if (app) {
|
||||||
app.$destroy()
|
app.$destroy()
|
||||||
|
// 清理 DOM 残留(Vue 2 的 $destroy 不会自动清 DOM)
|
||||||
|
const root = document.getElementById('app')
|
||||||
|
if (root) {
|
||||||
|
root.innerHTML = ''
|
||||||
|
}
|
||||||
app = null
|
app = null
|
||||||
}
|
}
|
||||||
|
console.log('[my-vue2-app] 子应用已卸载')
|
||||||
}
|
}
|
||||||
|
|
||||||
// 判断是否运行在 micro-app 沙箱中
|
// ============================================================
|
||||||
|
// 环境判断:微前端环境 vs 独立运行
|
||||||
|
// ============================================================
|
||||||
|
|
||||||
if (window.__MICRO_APP_ENVIRONMENT__) {
|
if (window.__MICRO_APP_ENVIRONMENT__) {
|
||||||
// 注册生命周期钩子,供主应用 keepAlive 切换路由时调用
|
// ✅ 微前端环境:按照 micro-app 标准规范导出生命周期
|
||||||
window.mount = mount
|
// micro-app 通过 window['micro-app-'+appName] 查找 mount/unmount
|
||||||
window.unmount = unmount
|
const appName = window.__MICRO_APP_NAME__
|
||||||
// 首次加载时主动挂载
|
window[`micro-app-${appName}`] = { mount, unmount }
|
||||||
|
|
||||||
|
console.log(`[my-vue2-app] 检测到微前端环境,应用名称: ${appName}`)
|
||||||
|
|
||||||
|
// 首次加载时主动挂载(非 keepAlive 场景)
|
||||||
mount()
|
mount()
|
||||||
} else {
|
} else {
|
||||||
// 独立运行模式(如本地开发直接访问 http://localhost:5173)
|
// ✅ 独立运行模式(直接访问 http://localhost:5173)
|
||||||
|
console.log('[my-vue2-app] 独立运行模式')
|
||||||
mount()
|
mount()
|
||||||
}
|
}
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="about">
|
<div class="about">
|
||||||
<h1>📖 关于页面</h1>
|
<h1>📖 关于页面</h1>
|
||||||
|
<h2>冲突吗</h2>
|
||||||
<p>这是一个使用 Vite 搭建的 Vue2 项目。</p>
|
<p>这是一个使用 Vite 搭建的 Vue2 项目。</p>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
Reference in New Issue
Block a user