如何从 Vue.js 中深层嵌套的子组件访问数据 [英] How to access data from deeply nested child components in Vue.js

查看:95
本文介绍了如何从 Vue.js 中深层嵌套的子组件访问数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用 Vue.js 构建一个界面.我有一个表格,这个表格包含一个地址和其他一些杂项数据.所以我在 Vue 中创建了两个组件,UserDataUserAddress.UserData 包含一个 UserAddress 的实例作为子组件.我想根据页面专门针对表单的提交"按钮的行为,因此这些组件不包含提交按钮——代表页面的外部组件 (UserPage) 包含提交按钮,只包含 UserData 模板.

所以层次结构是,UserPage => UserData => UserAddress.

现在我需要在 UserPage 上的某个方法中获取所有表单数据.我只想说我需要在提交处理程序中获取它,但我能想到的唯一方法是在不直接访问子组件的数据的情况下执行以下操作:

  • 使用 $broadcast 从提交处理程序向下传播事件 e1
  • 监听 UserAddress
  • 中的 e1 事件
  • 使用$dispatch发送一个事件e2并将地址数据与消息捆绑
  • UserData中监听e2,将其他表单数据添加到消息中,并传播或重新调度事件
  • UserPage 中监听 e2 并在那里找到完整的聚合数据.

这是处理这种情况的正常方法吗?这似乎有点矫枉过正,但手册明确不推荐访问子$data.

解决方案

使用 twoWay 道具.如果您在子属性中声明 twoWay: true,并从父级传递一个变量,如 :child-prop.sync="parent-data",则财产写在父母身上.你可以用这个做一个链子.代码应该是这样的

孩子