如何访问插槽中子组件的反应性数据?

彼得罗沃尔斯基

当前,我有一个父组件,该组件呈现一个子组件,并且还将一个组件(称为Modal.vue的模式)作为插槽传递给子组件。

父视图

<ChildComponent :id='1>
 <modal slot="modal" :postTitle="'test'" />
</ChildComponent>

小孩

export default {
props : ['id'],
data(){
return {
 modalHeading : "Heading"
}
}
<template>
<slot name="modal"></slot>
</template>

模态

<script>
export default {
  name: "model",
  props: ["postTitle"],
  data() {
    return {
      heading: "test"
    };
  },
  mounted() {
    console.log("mounted modal slot");
    console.log(this.postTitle);
    console.log(this.modalHeading);
};
</script>

<template>
  <div>
    <h2>{{ modalHeading }}</h2>
    <h3>This will be the modal slot</h3>
    <p>{{ postTitle }}</p>
  </div>
</template>

我的问题是,如何在插槽组件中访问孩子的数据(和功能)?

我一直在尝试使其与作用域内的插槽一起使用,但似乎无法破解语法。

米哈尔·莱维(MichalLevý)

我正在尝试基本上在模式插槽中显示一些子数据。本质上,父组件是页面,子组件是表,插槽是模式。对于单击的每个表格行,都会出现一个模式,其中包含表格数据。您如何建议这样做

也许是这样的吗?

<template>
  <div>
    <table>
      <row v-for="item in items" @click="onRowClick(item)"
         ....show some data
      </row>
    </table>
    <modal v-if="activeItem" :item="activeItem" @onClose="onModalClose" />
  </div>
</template>
<script>
export default {
  name: 'child',
  props: ["items"]
  data() {
    return {
      activeItem: null
    }
  },
  methods: {
    onRowClick(item) {
      this.activeItem = item;
    },
    onModalClose() {
      this.activeItem = null;
    }
  }
}
</script>

我不知道这怎么具有插槽的灵活性?

好吧,它不像插槽那样灵活,但可以完成工作:)

如果您确实需要以允许在不同地方使用它/更改其外观(在您的情况下为行详细信息)的方式设计Child / table组件,则可以使用插槽。

插槽

插槽是内容的分发点当您在组件内部放置插槽时,您说的是“我的父组件可以提供部分模板。呈现此模板时(在父组件的范围内-重要,因为该模板只能访问父组件的数据/方法等),我'将呈现的结果放入我自己的模板中的这个确切位置”。使用常规插槽就像将HTML传递到组件中一样

我的问题是,如何在插槽组件中访问孩子的数据(和功能)?

您必须明确授予插槽模板访问某些子数据的权限假设您的子组件具有prop item您可以像这样在其中定义作用域插槽

<slot name="rowExpander" :itemProp="item"></slot>

...并像这样在父级内部使用它:

<template v-slot:rowExpander="slotProps">
  <MyRowExpanderComponent :item="slotProps.itemProp" />
</template>

或使用ES2015解构

<template v-slot:rowExpander="{ itemProp }">
  <MyRowExpanderComponent :item="itemProp" />
</template>

几乎所有内容都可以传递到作用域中的插槽-数据/属性/方法/计算的,甚至可以使用实例属性,例如$data$props

<slot name="rowExpander" :childProps="$props"></slot>

这是不可能通过子实例本身:

<slot name="rowExpander" :child="this"></slot>

(主要是因为this未在模板内部定义-我认为如果使用render函数编写不带模板的组件,则可以完成此操作)

重要的是要了解作用域插槽模板只是常规的Vue模板。它可以访问在那里所定义的组分(亲本)的所有实例属性和附加到一个slotProps对象。当您在作用域插槽模板中使用组件时,该组件无权访问所有子数据也无法slotProps 自动访问-仍然需要显式地将其传递给它(如MyRowExpanderComponent上述示例所示)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

访问VusJS中子组件内部的插槽功能

来自分类Dev

如何从父反应组件访问子反应组件中的数据

来自分类Dev

与插槽反应头组件

来自分类Dev

如何使用钩子访问Preact中子组件的DOM元素?

来自分类Dev

过滤后访问反应性表数据

来自分类Dev

如何访问反应组件中的样式元素?

来自分类Dev

如何实现对数据库中子集的受限访问

来自分类Dev

如何在组件之间传输数据 - 反应?

来自分类Dev

如何访问反应表组件的列中的行索引

来自分类Dev

如何在反应中访问父组件状态

来自分类Dev

如何访问另一个子组件中插槽的内容

来自分类Dev

数据帧中子集的相关性

来自分类Dev

在功能性 vuejs 组件的渲染函数中访问数据

来自分类Dev

组件应如何访问商店中的数据?

来自分类Dev

如何访问子组件中的父数据

来自分类Dev

如何从方法中的组件访问数据

来自分类Dev

反应。访问根组件的 props

来自分类常见问题

在插槽内获取cms组件数据

来自分类Dev

在插槽和组件vuejs之间传递数据

来自分类Dev

在插槽内获取cms组件数据

来自分类Dev

反应功能性组件与经典组件

来自分类Dev

反应功能性组件与经典组件

来自分类Dev

如何在反应组件中显示 API 数据?

来自分类Dev

反应-如何刷新组件?

来自分类Dev

如何在反应中访问从子组件到父组件的值

来自分类Dev

如何影响插槽vuejs中的组件?

来自分类Dev

如何使用插槽扩展Vue组件

来自分类Dev

如何使用React中子组件的状态更新父组件?

来自分类Dev

如何使用React中子组件的状态更新父组件?