在作用域槽中传递道具不起作用

时间:2018-08-20 01:07:35

标签: javascript vue.js slot

我正在尝试将我的表包装在插槽中,以实现可重用性,但是在传递label道具时遇到了麻烦:

我的主要父组件Parent.vue

    <Table
        :headers="headers"
        :items="people"
        :search="search"
        :label="label"
    >
        <template scope="props">
        Label is: {{ label }} <!-- this label is not printing out -->
        <v-data-table :headers="props.headers" :items="people" :search="props.search">
            <template slot="items" slot-scope="props">
            <td>{{ props.item.firstName }}</td>
            <td>{{ props.item.lastName }}</td>
            <td>{{ props.item.email }}</td>
            </template>
        </v-data-table>
        </template>
    </Table>

我的Table组件:

<template>
  <div>
    <slot :items="items" :headers="headers" :search="search" scoped-slot="{label: label}"></slot>
  </div>
</template>

<script>
  export default {
    data() {
      return {
          label: "Some label"
      }
    },
    computed: {

    },
    props: ["items", "headers", "search"]
  }

</script>

此方法给我错误Property or method "label" is not defined。有人可以帮忙指出我在传递label道具时出了什么问题吗?

1 个答案:

答案 0 :(得分:2)

您需要以props.label的身份访问它,而不仅仅是label

<template slot-scope="slotProps">
  Label is: {{ slotProps.label }} <!-- this label is not printing out -->
  <v-data-table :headers="props.headers" :items="people" :search="props.search">
      <template slot="items" slot-scope="props">
      <td>{{ props.item.firstName }}</td>
      <td>{{ props.item.lastName }}</td>
      <td>{{ props.item.email }}</td>
      </template>
  </v-data-table>
</template>

在表格组件中,传递label就像其他绑定值一样简单:

<template>
  <div>
    <slot :items="items" :headers="headers" :search="search" :label="label"></slot>
  </div>
</template>