可以通过计算属性的方式来实现。

首先,在组件中定义一个计算属性,用于计算传入的slot数量:

computed: {
  rows () {
    return Math.ceil(this.$slots.default.length / 6)
  }
}

然后,在模板中使用v-for循环来渲染每一行的slot:

<template>
  <div>
    <div v-for="i in rows" :key="i" class="row">
      <slot :name="'item' + (i*6-5)"></slot>
      <slot :name="'item' + (i*6-4)"></slot>
      <<slot :name="'item' + (i*6-3)"></slot>
      <slot :name="'item' + (i*6-2)"></slot>
      <slot :name="'item' + (i*6-1)"></slot>
      <slot :name="'item' + (i*6)"></slot>
    </div>
  </div>
</template>

在这里,我们使用了v-for循环来渲染每一行,根据计算属性计算出来的行数来确定循环次数。在每一行中,我们使用slot的name属性来确定要渲染的具体slot,通过计算i6-5到i6的值来确定每个slot的名称。

最后,在使用组件时,只需要在组件中传入需要展示的slot即可:

<template>
  <my-component>
    <div slot="item1">1</div>
    <div slot="item2">2</div>
    <<div slot="item3">3</div>
    <div slot="item4">4</div>
    <<div slot="item5">5</div>
    <div slot="item6">6</div>
    <div slot="item7">7</div>
    <div slot="item8">8</div>
    <div slot="item9">9</div>
    <div slot="item10">10</div>
    <div slot="item11">11</div>
    <div slot="item12">12</div>
  </my-component>
</template>

在这里,我们传入了12个slot,根据我们的计算属性,会渲染两行,每行展示6个slot。


原文地址: https://www.cveoy.top/t/topic/w8C 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录