首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >VueJS:更改子组件中的数据并更新父组件的数据。

VueJS:更改子组件中的数据并更新父组件的数据。
EN

Stack Overflow用户
提问于 2018-11-05 09:14:27
回答 3查看 2.6K关注 0票数 0

我在一起使用多个组件,这样就可以被重用了。主组件执行aJax调用来获取一些数据,然后将这个get传递给另一个组件,然后再将该数据传递给另一个组件。

代码语言:javascript
复制
<input-clone endpoint="/api/website/{{ $website->id }}/locations/{{ $location->slug }}/get-business-hours" name="businessHours">

    <div class="input-clone businessHours" slot-scope="{ data, add, remove, onDragStart, onDragEnd, onDragOver, onDragEnter, onDragLeave, onDrop, setClass }">

        <business-hours :injected-data="hours" :injected-days="data.days[0]">

            <time-select :injected-data="hours.open_time" :key="'opentime' + hoursIndex">

            </time-select>

        </business-hours>

    </div>

</input-clone>

主要的问题是input-clone组件有一个拖放特性,它允许我在里面移动项目,当它移动它们时,它会重新排列主数据对象,这当然会重新呈现子组件,因此子组件中的任何数据更改都会被重置。

如何更新来自子元素的主数据,以便当我重新排列元素时,它们不会丢失数据更改。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-11-05 09:22:35

你在找$emit。在子组件中,通过使用$emit('updateData',有效负载)将数据更改发送给父组件。然后,您可以监听组件上的更新,例如:

代码语言:javascript
复制
<business-hours @updateData="doSomething(payload)" :injected-data="hours" :injected-days="data.days[0]">

您可以使用doSomething方法使用组件中的更改更新主数据。这样,当组件被重命名时,它们将被保留。

更多信息在这里:https://v2.vuejs.org/v2/guide/components.html#Emitting-a-Value-With-an-Event

票数 2
EN

Stack Overflow用户

发布于 2018-11-05 09:23:25

与其先将数据更改为子组件,然后更新父组件,不如在父组件上发出关于子组件更改的事件,并在父组件中设置状态,然后子组件将按此重新呈现。通过这种方式,您可以维护父组件的理念,即父组件应该将数据传递给子组件,并将任何更改通知父组件。

你可以在这篇博文- https://medium.com/@sky790312/about-vue-2-parent-to-child-props-af3b5bb59829上读到更多关于它的信息。

票数 1
EN

Stack Overflow用户

发布于 2018-11-05 09:22:35

为您的组件实现v-model

来自Vue文档

但是,要使其实际工作,组件内部必须:

  • 将value属性绑定到值支柱
  • 在输入时,使用新值发出它自己的自定义输入事件。

在代码中,这是指:

代码语言:javascript
复制
props: ['value']

在组件声明中,并调用

代码语言:javascript
复制
this.$emit('input', <something>)

更新值。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53151358

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档