首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >异步和动态组件

异步和动态组件
EN

Stack Overflow用户
提问于 2018-11-07 11:10:29
回答 1查看 377关注 0票数 0

我想要实现的是将vuejs的“异步组件”和它的“动态组件”( dynamic,https://v2.vuejs.org/v2/guide/components-dynamic-async.html)结合起来,以获得一种灵活的使用动态组件的方法。

比方说,我有以下组件:

代码语言:javascript
复制
<template>
    <div>
       some stuff..
       <component :is="type"></component>
       some stuff...
    </div>
</template>

<script>
    export default {
        name: "mycomponent",
        props: {
            type: {}
        }
    }
</script>

我会这样用它:

代码语言:javascript
复制
<mycomponent type="myinput"></mycomponent>

要使其工作,我需要在myinput中加载mycomponent组件,我将执行以下操作:

代码语言:javascript
复制
components: {
    MyInput: () => import("./myinput")
}

起作用了!

现在的问题是,我想让它变得动态,并像这样使用它:

代码语言:javascript
复制
<mycomponent type="myinput"></mycomponent>
<mycomponent type="myselect"></mycomponent>
<mycomponent type="mytextarea"></mycomponent>
...

为了启动和运行这些组件,我需要在mycomponent中导入所有这些组件,这显然不是一个好主意。全球进口也是如此,这并不是一条出路。

这只是一个例子,但真正的用例是从api中获取一个type数组,并使用它动态地呈现一个表单。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-07 12:30:05

所以我想出了我还不能尝试的东西。

假设您有一个用于不同类型输入的组件,为了简单起见,您可以用一个“输入”前缀来命名它们。

只要每个人都遵循命名规则,就可以全局注册所有这些组件。

例如,在BaseInputs.js中

代码语言:javascript
复制
const components = require.context(path, subfolder, regexForInputComponentFileNames)

https://webpack.js.org/guides/dependency-management/#require-context

代码语言:javascript
复制
components.keys().forEach(element => {
    const componentName = element.replace(/*Everything that is not the component name like .vue*/)

    Vue.component(componentName, () => import(path + componentName)
})

然后,您只需在应用程序开始时导入'path/to/BaseInputs‘。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53188312

复制
相关文章

相似问题

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