首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Vue动态组件覆盖

Vue动态组件覆盖
EN

Stack Overflow用户
提问于 2019-10-24 18:51:34
回答 1查看 326关注 0票数 1

我的项目使用Laravel和Vue (由Laravel-Mix编译)。它有这样的结构:

我想要的是检查组件是否存在于覆盖的程序文件夹中并加载它的块,如果不是默认到components文件夹。最后会有多个程序文件夹。程序名称设置到Vuex商店自动取款机中。我知道其中的一部分可以通过Vue标签实现。但这需要显式声明组件,我希望避免这种情况,因为最终每个组件都需要一个巨大的导入列表。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-30 17:13:31

有一种方法可以做到这一点。你做的方法是通过Webpack的块分割。使用Dynamic Import -通过函数导入组件,该函数返回新的Promise,并且在组件的路径中有类似'/components/${res}'的内容。首先,我们创建一个Promise来尝试加载我们的默认组件:

代码语言:javascript
复制
export default function _getDefaultComponent(res){
return new Promise((resolve, reject) => {
    import(
        /* webpackChunkName: "js/chunk/[request]" */
        @/components/${res}
        )
        .then((component) => {
            resolve(component);
        })
        .catch((error) => {
            reject(error);
        });
}

之后,我们创建覆盖函数,如下所示:

代码语言:javascript
复制
import _getDefaultComponent from "@/helpers/_getDefaultComponent";
import { program } from "@/store/program";

export default function _getComponent(res){
return new Promise((resolve, reject) => {
    let programName = program.state.programName;
    import(
        /* webpackChunkName: "js/chunk/program/[request]" */
        @/@program/${programName}/components/${res}
        )
        .then((component) => {
            resolve(component);
        })
        .catch((error) => {
            _getDefaultComponent(res)
                .then((component) => {
                    resolve(component);
                })
                .catch((error) => {
                    console.error(No Component with the name ${res}, error:, error);
                    reject(error);
                });
        });
    });
}

我们现在要做的是获取程序的名称(在本例中来自Vuex ),如果失败,我们尝试查找程序文件夹中的组件,如果失败,则返回到默认组件,如果失败,也会使用试图解决的组件名称来控制错误。最后,使用它导入是这样的:

代码语言:javascript
复制
import _getComponent from "@/helpers/_getComponent";

之后,我们在你的组件中如下所示:

代码语言:javascript
复制
components:{
    Component: () => _getComponent('Component')
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58539762

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档