vue如何动态加载和调用子组件?(<component>的使用)

204 阅读2分钟

1.需求背景

    遥想当年,刚毕业的时候,激动的心颤抖的手。运用高超的吹牛逼技术+忽悠的技能,随机挑选了一名幸运鹅,进了一家公司开始了搬砖之旅。
    此后的很长时间做的工作都是非常简单明确且枯燥的,比如一个表格,一个表单,根据UI给出的图,结合JSON数据,CV上去就可以了。
    但突然有一天我接到了一个需求,我们要做一个可以配置的功能,比方说,每个表单的结构都是不确定的,根据后端配置,生成不同的表单。这就使得我需要将每个标签,每个按钮,都拆成一个单独的组件(比如input是一个组件,单选、多选、下拉选择等等都是一个单独的组件),然后我根据JSON结构,把这些组件组合成一个表单。
    怎么搞呢?于是我去翻了下官网文档。内置特殊元素 | Vue.js (vuejs.org)

2.使用component动态加载子组件

image.png

我们先来看下官网介绍,is可以是一个字符串也可以是一个组件

<div
  v-for="(controls, index) in item.controls"
  :key="index"
>
  <component
    :is="controls.component"
    :params="controls"
  />
</div>

像我就直接给is传了一个组件(controls.component),那controls.component怎么来的呢,我们接着往下看。

image.png

controls是一个对象数组,假设说里面有7条数据就分别对应着表单上的7个组件,那此时我们就需要动态的去加载这7个组件来组成一个新的表单。

我们通过import的方式来导入组件(路由配置时也是这么干的),item.type是json返回的组件类型,指向你自己封装的组件名(由于我封装的名字跟返回的type是一致的,所以直接这样写比较方便)

各位大哥大姐不妨动动发财的小手点点赞~您的支持是俺最大的动力!