如何访问创建的钩子中的插槽道具?

Posted

技术标签:

【中文标题】如何访问创建的钩子中的插槽道具?【英文标题】:How to access slot props in the created hook? 【发布时间】:2020-07-29 09:44:31 【问题描述】:

我正在尝试访问要传递给我的插槽的属性。但是我的slotProps 是未定义的。

由于我还是 Vue 的新手并且我已经阅读了他们的文档,我似乎仍然无法弄清楚为什么我无法访问道具数据。

问题

我正在尝试访问我的子组件created 中的slotProps,但它未定义

强调文字

<template>
  <div>
    <slot :data="data" :loading="loading"></slot>
  </div>
</template>

孩子

<template v-slot:default="slotProps">
  <div >

  </div>
</template>

<script>
export default 
  name: "child"
  created: function() 
    console.log("slotProps", slotProps);
  
;
</script>

【问题讨论】:

【参考方案1】:

您不需要created() 生命周期挂钩来实现您想要的。有几件事需要澄清:

您使用的实际上称为scoped slots。它们很有用,因为与使用默认插槽和命名插槽不同,父组件无法访问其子组件的数据。

你所谓的实际上是父组件。

Child.vue 组件应该是这样的:

<template>
  <div>
    <main>
      <slot :data="data1" :loading="loading1" />
    </main>
  </div>
</template>

<script>
export default 
  name: 'Page',
  data () 
    return 
      data1: 'foo',
      loading1: 'bar'
    
  

</script>

在一个Parent.vue组件中,可以通过如下方式访问上述组件的数据:

<template>
  <child>
    <template v-slot="slotProps">
       slotProps.data ,
       slotProps.loading 
    </template>
  </child>
</template>

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

export default 
  components:  Child 

</script>

或者你也可以destruct动态对象如下:

<template>
  <child>
    <template v-slot="data, loading ">
       data ,
       loading 
    </template>
  </child>
</template>

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

export default 
  components:  Child 

</script>

这是使用作用域插槽从父组件访问子组件数据的简洁方式。

【讨论】:

好的,那么如何Parent.vuejavascript 代码中(而不是在其模板中)访问slotProps.data?到目前为止,您的答案还没有说出来。

以上是关于如何访问创建的钩子中的插槽道具?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 `value` 道具和 `v-model` 道具分配给自定义 Vue 组件?

如何从对象中的组件访问道具

如何从 Reactjs 中的 useEffect 挂钩访问道具

如何在 R 中访问 S4 对象的插槽

使用 React 钩子,我如何更新通过道具传递给孩子的对象?

如何在钩子中设置值