当前位置: 首页 > 知识库问答 >
问题:

VueJS从父组件访问子组件的数据

桂嘉年
2023-03-14

我在用vue-cli支架做网页包

我的Vue组件结构/传家宝目前看起来如下:

  • 应用程序

在应用程序级别,我需要一个vuejs组件方法,该方法可以将子组件的所有数据聚合到一个JSON对象中,然后发送到服务器。

有没有办法访问子组件的数据?具体来说,多层深?

如果没有,传递oberservable数据/参数的最佳实践是什么,这样当子组件修改它时,我就可以访问新的值?我试图避免组件之间的硬依赖关系,所以到目前为止,使用组件属性传递的唯一内容是初始化值。

更新:

可靠的答案。在回顾了这两个答案后,我发现资源非常有用:

  • Vuex以及何时使用它
  • 适用于小型应用程序的Vuex替代解决方案

共有3个答案

邹学民
2023-03-14

传递oberservable数据/参数的最佳实践是什么,这样当它被子组件修改时,我就可以访问新的值?

道具的流动是单向的,孩子不应该直接修改道具。

对于复杂的应用程序,vuex是解决方案,但对于简单的情况,vuex是一种过度杀伤力。正如@Belmin所说,由于反应性系统,您甚至可以使用一个普通的JavaScript对象。

另一个解决方案是使用事件。Vue已经实现了EventEmitter接口,孩子可以使用此接口$emit('eventName',data)与其父级通信。

父节点会监听这样的事件:(@datev-on的简写:date

<child :value="value" @update="onChildUpdate" />

并更新事件处理程序中的数据:

methods: {
  onChildUpdate (newValue) {
    this.value = newValue
  }
}

下面是Vue中自定义事件的一个简单示例:
http://codepen.io/CodinCat/pen/ZBELjm?editors=1010

这只是父子通信,如果组件需要与其同级通信,那么您将需要Vue中的全局事件总线。js,您可以只使用一个空的Vue实例:

const bus = new Vue()

// In component A
bus.$on('somethingUpdated', data => { ... })

// In component B
bus.$emit('somethingUpdated', newData)
酆意智
2023-03-14

对于这种结构,最好有一些商店。

VueJS提供了解决方案,它被称为Vuex。如果你还没有准备好使用Vuex,你可以创建自己的简单商店。

让我们试试这个

廉价商店。js

export default {

 data: {
   items: []
 },

 // Methods that you need, for e.g fetching data from server etc.

 fetchData() {
   // fetch logic
 }

}

现在,通过导入此存储文件,您可以在任何地方使用这些数据

HomeView。vue

import MarkdownStore from '../stores/MarkdownStore'

export default {

 data() {
   sharedItems: MarkdownStore.data
 },

 created() {
   MarkdownStore.fetchData()
 }

}

如果你不想使用Vuex,这就是你可以使用的基本流程。

常嘉平
2023-03-14

在我的子组件中,没有用于发出更改数据的按钮。这是一个有5~10个输入的表单。单击其他组件中的“流程”按钮后,将提交数据。所以,我不能在每个属性发生变化时发射它。

所以,我所做的,

在我的父组件中,我可以从“参考”访问孩子的数据

e. g.

<markdown ref="markdowndetails"></markdown>
<app-button @submit="process"></app-button>

// js
methods:{
    process: function(){
        // items is defined object inside data()
        var markdowns = this.$refs.markdowndetails.items 
    }
}

注意:如果您在整个应用程序中都这样做,我建议改为使用vuex。

 类似资料:
  • 如何从父组件中访问子组件数据?我有一个父组件“MissionPlanner ”,我想访问名为“ChosenHeroes”的子组件“chosenHeroes”数组。如果数组中有元素,我想最终呈现一个div并能够更新父数组中的数组 我不确定我是否应该使用emit()以及如何确切地使用它。我尝试制作一个自定义事件“addHero”并将其传回。但是我遇到了错误 ChosenHeroes.vue HeroP

  • 问题内容: 我开始玩vuejs(2.0)。我构建了一个包含一个组件的简单页面。该页面具有一个带有数据的Vue实例。在该页面上,我注册了该组件并将其添加到html中。该组件有一个。我希望该值反映在父对象(主Vue实例)上。 如何正确更新组件的父数据?从父级传递绑定的道具不好,并且会向控制台发出一些警告。他们的文档中有内容,但是没有用。 问题答案: Vue 2.0中不赞成使用双向绑定,而是使用事件驱动

  • 本文向大家介绍vuejs父子组件通信的问题,包括了vuejs父子组件通信的问题的使用技巧和注意事项,需要的朋友参考一下 父子组件之间可以通过props进行通信: 组件的定义: 1.创建component类:  2.注册一个tagnme: 局部注册: 模板注意事项:  因为 Vue 就是原生的DOM,所以有些自定义标签可能不符合DOM标准,比如想在 table 中自定义一个 tr,如果直接插入 my

  • 如何在孩子的标签和函数sayhello中访问家长的道具? (我可以访问兄弟姐妹和孩子,而无需将道具作为参数传递,但不能访问家长) \uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu 和(远离本例) 如果此代码引用了 如何访问家长的道具 如果将Chi

  • 问题内容: 如果我有类似的东西 我想从我拥有的地方访问,该怎么办? 问题答案: 推荐用于16.3之前的React版本 如果无法避免,那么从React文档中提取的建议模式将是: 该 家长 转发绑定到一个功能道具 家长 。当呼叫作出反应的 儿童的 道具也将分配 孩子的 给 父母的 财产。 建议用于React> = 16.3 引用转发是一种选择加入功能,它使某些组件可以接收它们收到的引用,并将其进一步向