双层for循环中,slotscope中的变量未定义

组件中:
@/components/Table.vue

<template>
  <div>
    <table>
      <thead>
        <tr>
          <td v-for="(item, index) in 5" :key="index">
            <slot :name="'head' + index" :test="88"></slot>
          </td>
        </tr>
      </thead>
      <tbody>
        <tr v-for="(item1, index1) in 5" :key="index1">
          <td v-for="(item2, index2) in 5" :key="index2">
            <slot :name="'body' + index1 + index2" :test2="99"></slot>
          </td>
        </tr>
      </tbody>
    </table>
  </div>
</template>

页面中:
@/views/Home.vue

<template>
  <div class="home">
    <Table>
      <template
        v-for="(item, index) in 5"
        slot-scope="{ test }"
        :slot="'head' + index"
      >
        {{ test }}
      </template>
      <template v-for="(item1, index1) in 5">
        <template v-for="(item2, index2) in 5">
          <div
            :slot="'body' + index1 + index2"
            :key="index1 + index2"
            slot-scope="{ test2 }"
          >
            {{ test2 }}
          </div>
        </template>
      </template>
    </Table>
  </div>
</template>

<script>
import Table from '@/components/Table.vue'

export default {
  name: 'Home',
  components: {
    Table
  }
}
</script>

想封装一个课程表组件,这个时候,每个课程表的格子实际上是地位是一样的,所有我才想用横向和纵向两层循环来实现。

结果thead中的test变量可以正常显示,tbody中的test2无法显示,多了一层for循环怎么显示不了了,请问下要怎么解决?
运行结果

回答:

没见过这种双层的写法。不过没必要这样写吧,参照官网示例

你应该只传入一个渲染,然后在组件内把所有元素都吐出来,渲染即可。在使用elementui的时候也没有使用过双循环呀。

  <div
    :slot="'body'"
    :key="index1 + index2"
    slot-scope="{ test2 }"
  > {{ test2 }} </div>

暂无评论

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注