想用Vue写一个页面组件,可以插入多个子模块,数量不定。 请问怎么写?

请问怎么插入不指定数量的模块?

<Page>
  <template #module1>
  </template>
  <template #module2>
  </template>
  ...
</Page>

想到解决方案了,采用动态插槽
<slot :name="index"></slot>
因为子模块数量不定,所以名字不能固定。

<div class="module" v-for="(module, index) in titles" :key="index">
          <div
            :ref="(el: refItem) => setRefMap(el, index)"
            class="title pt2 pb2"
            @click="onTabChange(index)"
          >
            <div class="wrapper">
              <div class="pre"></div>
              <span class="ml-2">
                {{ module }}
              </span>
            </div>
          </div>
          <slot :name="index"></slot>
        </div>
阅读 1.5k
avatarAI BotBETA
<template>
  <div>
    <slot></slot>
  </div>
</template>

<script>
export default {
  name: 'DynamicModule',
}
</script>
4 个回答

1、jsx,插槽只留一个,根据参数动态加载多个模块插入
2、slot 用v-for

    <slot v-for="item in schema" :name="item.prop" />

既然你想通过插槽进行替换,那就需要确定插槽的位置
一个萝卜一个坑,固定好页面的整体结构,作为整体向外暴露。

用插槽呗,一个插槽可以插入一个组件,而这个组件又可以包括多个子组件,所以基本上用插槽就可以实现你说的不指定数量的模块。

题主应该把不指定数量的模块理解成不指定数量的插槽了?如果是的话,那应该使用v-for实现吧

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏