[英]Load dynamically a vuejs library and render the component on it
我有一个 vuejs 应用程序作为多个其他“应用程序”的容器。 当时的想法是:
在我的第一个库中,我有这个 main.js:
import HelloRadar from './components/HelloRadar.vue'
export default HelloRadar
这个组件,HelloRadar:
<template>
<div>
Hello from radar !
</div>
</template>
<script>
export default {
name: 'HelloRadar'
}
</script>
<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
</style>
现在,在我的主应用程序上,我有以下代码:
<template>
<div>
<ul>
<li v-for="module in modules" v-bind:key="module" @click="loadModule(module)">
{{ module }}
</li>
</ul>
</div>
</template>
<script>
import axios from 'axios';
export default {
name: 'HelloWorld',
data() {
return {
modules: [],
selectedModuleMenu : null,
selectedModuleApp : null
}
},
created: function () {
axios.get("/orbit/api/modules").then((response) => {
var modulesList = response.data;
this.modules = modulesList;
});
},
methods: {
loadModule: function (moduleName) {
this.loadExternalComponent("/modules/" + moduleName + "/"+ moduleName + ".umd.js");
},
loadExternalComponent : function(url) {
const name = url.split('/').reverse()[0].match(/^(.*?)\.umd/)[1];
if (window[name]) return window[name];
window[name] = new Promise((resolve, reject) => {
const script = document.createElement('script');
script.async = true;
script.addEventListener('load', () => {
resolve(window[name]);
});
script.addEventListener('error', () => {
reject(new Error(`Error loading ${url}`));
});
script.src = url;
document.head.appendChild(script);
});
return window[name];
}
}
}
</script>
<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
</style>
问题是函数 loadExternalComponent 似乎不起作用。 我在控制台中收到此 js 错误:
未捕获的类型错误:无法读取未定义的属性“createVNode”
Uncaught (in promise) TypeError: Chaining cycle detection for promise #
我从这里选择了这个方法https://markus.oberlehner.net/blog/distributed-vue-applications-loading-components-via-http/
你知道如何制作这种应用程序吗? 使用 lib 是正确的方法吗? 谢谢你的帮助
我想你的问题有一个答案:
通过 Vue 3 vue-cli 构建的组件依赖于 Vue 在全局范围内可用。 因此,为了渲染通过我文章中描述的技术加载的组件,您需要将 window.Vue 设置为对 Vue 本身的引用。 然后一切都按预期进行。
马库斯·奥伯莱纳
@moriartie (Markus Oberlehner) 已经用 @markoffden 解决了这个问题: Vue 3 外部组件/插件在运行时加载
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.