Appearance
使用 Vue 框架
本教程主要说明 Vue 应用如何接入 Lyra 平台。
注意
仅支持 Vue 2.7+ 和 3.0 版本。
应用集成
这里以 Vue cli >= 5.0 版本作为介绍。
提示
CLI 5.0 集成的是 webpack 5,与之前的 API 稍有出入
修改 vue.config.js 文件:
js
const { defineConfig } = require('@vue/cli-service');
module.exports = defineConfig({
configureWebpack: {
output: {
library: '<your library name>',
libraryTarget: 'umd',
uniqueName: 'webpackJsonp_mediinfo_<your library name>',
},
},
devServer: {
allowedHosts: 'all',
headers: {
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Methods': '*',
'Access-Control-Allow-Headers': '*',
},
},
});js
import './public-path.js'
import { appCreator, unmountApp } from './app.js'
// Note: 即使你没有什么要处理的,此函数也不能省略
export async function bootstrap() {
// do something...
}
export async function mount({ container }) {
const { mount } = appCreator();
mount(container.querySelector('#app')!);
}
export async function unmount({ container }) {
unmountApp(container)
}js
if (window.__POWERED_BY_QIANKUN__) {
// 修改变量,以修复构建资源加载问题
// https://qiankun.umijs.org/zh/faq#%E4%B8%BA%E4%BB%80%E4%B9%88%E5%BE%AE%E5%BA%94%E7%94%A8%E5%8A%A0%E8%BD%BD%E7%9A%84%E8%B5%84%E6%BA%90%E4%BC%9A-404
const resource = new URL(
process.env.BASE_URL,
window.__INJECTED_PUBLIC_PATH_BY_QIANKUN__,
);
__webpack_public_path__ = resource.toString();
}然后,根据自己的版本选择:
js
import mdly from 'mdly'
// 将之前应用的逻辑移入一个函数内
export function appCreator() {
const router = createRouter({
history: createWebHashHistory(),
routes,
});
mdly.onAppShow(() => {
router.options.history.listening = true
})
mdly.onAppHide(() => {
router.options.history.listening = false // 防止与其他应用冲突
})
const app = createApp(App);
app.use(router);
return app;
}
export function unmountApp(container) {
const elem = container.querySelector('#app');
const app = elem ? elem.__vue_app__ : null;
if (app) app.unmount();
}js
import mdly from 'mdly'
// 将之前应用的逻辑移入一个函数内
export function appCreator() {
const router = createRouter()
const mount = (elem) => {
const app = new Vue({
router,
render: h => h(App),
});
app.$mount(elem)
}
return { mount };
}
export function unmountApp(container: HTMLDivElement) {
// 查询容器下的挂载节点
const mountElement = container.querySelector('#app');
// 被 vue 挂载的节点会出现 __vue__ 属性
// 但有一种情况会没哟,那就是挂载的时候报错,没有挂载成功
const app = mountElement ? mountElement['__vue__'] : null;
if (app) {
app.$destroy();
app.$el.innerHTML = '';
}
}
function createRouter() {
const router = new VueRouter({
mode: 'hash',
routes,
});
mdly.onAppShow(() => {
router.history.setupListeners()
})
mdly.onAppHide(() => {
router.history.teardown() // 防止与其他应用冲突
})
return router;
}最后,你就接入到平台中看看效果。
组合式 API
我们内置了一些简单的 API,减少一些封装操作。
vue
<script setup>
import { onAppShow, onAppHide } from 'mdly/vue'
onAppShow(() => {
console.log('应用显示了')
})
onAppHide(() => {
console.log('应用隐藏了')
})
</script>以下为支持的 API 列表:
内置组件
敬请期待