如何使用v-for循环Vue js 3创建插槽?

z4iuyo4d  于 2023-08-07  发布在  Vue.js
关注(0)|答案(1)|浏览(155)

我希望在子组件中创建一个带有slot的v-for循环。如何将循环的数据传递给子组件?数据使用表格html模板。

// parent component

<template v-slot:delaysBody="{ delaysBody }">
  <div v-for="d in delayBody" :key="d.id">
    <td>{{delaysBody.reason}}</td>
  </div>
</template>

delaysBody: [
{
  id: '1',
  reason: 'text'
},
{
  id: '2',
  reason: 'text'
}

//child component

<tr v-for="delay in body" :key="delay.id">
  <td scope="col">{{delay.id}}</td>
  <td scope="col">{{delay.id}}</td>
  <slot name="reasonBody" v-bind:delaysBody="delaysBody"></slot>
</tr>

props: ['body']

// I had read this approach chould work, but it doesn't

<template v-for="(reasonBody, index) of Object.keys($slots)" :key="index" v-slot:[reasonBody]>
  <td scope="col"></td>
</template>
//

字符串

irlmq6kh

irlmq6kh1#

delaysBody: [{
  id: '1',
  reason: 'text'
}, {
  id: '2',
  reason: 'text'
}]

字符串
父组件模板

<ChildComponent>
  <template #delays-body="{ delaysBody }">
    <td v-for="d in delaysBody" :key="d.id">{{d.reason}}</td>
  </template>
</ChildComponent>


孩子

<tr v-for="delay in body" :key="delay.id">
  <td scope="col">{{delay.id}}</td>
  <slot name="delays-body" :delaysBody="delaysBody"></slot>
</tr>


你的变量名并没有让事情变得更清楚。你应该重新考虑命名。

相关问题