通过子组件更新父数据
Updating parent data via child component?
通过子组件更新父数据的正确过程是什么?
在子组件中-我直接通过props
修改父数据。我不确定这样做是不是错的。
根据vue doc:
当父属性更新时,它将向下流向子属性,但是
子组件示例:
<script>
export default {
props: ['user'],
data: function () {
return {
linkName: '',
linkValue: '',
}
},
methods: {
addLink: function (event) {
event.preventDefault();
this.$http.post('/user/link', {name: this.linkName, key: this.linkValue}).then(response => {
this.user.links.push(response.data);
}, response => {
// Error
}
});
},
}
}
</script>
我使用了this.user.links.push(response.data);
,它通过props: ['user']
直接修改数据到父组件
正如您所说,props
并不意味着将数据从子节点传递到父节点。数据绑定是单向的。
正确的过程是让子组件通过$emit向父组件发送一个事件,并附带一些值(可选)。
在您的情况下,您可以在子组件的addLink
方法中执行以下操作:
this.$http.post('/user/link', {name: this.linkName, key: this.linkValue}).then(response => {
this.$emit("update-user-links", response.data); // Send an event to parent, with data
}, response => {
// Error
});
你的父母可以这样听:
<my-user-link-component :user="userData" v-on:update-user-links="addUserLink"></my-user-link-component>
或简写语法:
<my-user-link-component :user="userData" @update-user-links="addUserLink"></my-user-link-component>
在上面,你分配了一个方法addUserLink
来处理子组件的事件。在你的父组件中,你需要这样定义这个方法:
methods: {
// ... your other methods,
addUserLink: function(linkData) {
this.userData.links.push(linkData);
}
}
从上到下的单向绑定和事件机制的好处:
- 你的父组件可以选择忽略事件,这样就可以让子组件在其他上下文中被重用。
- 你的子组件(假设你有很多)将被允许只向上发送事件,这是更容易调试时,每个直接改变父状态。
相关文章:
- 平均值:无法将数据更新到数据库
- d3在数据更新时错误地附加了dom元素
- 使用角度传递的数据更新模态
- jQuery使用XML数据更新UL列表
- ng表DOM未使用数据更新进行更新
- 在线/离线数据更新移动最佳实践
- 使用 预测 API 数据更新的 HTML 模板
- JQuery 数据表列数据更新工作太慢
- 使用Plotly中的新数据更新图形的高性能方法
- 使用新数据更新 D3 饼图.json
- jQuery - 使用相同的数据更新 2 个或多个表单字段
- 如何在数据更新时更新可重用的 d3.js 图形
- 组合框/下拉框在数据更新后未更新
- 在 JavaScript 中的数据更新后,我的 DOM 对象不会更新
- 如何使用来自外部源的数据更新 ng 模型
- 主干.js:使用不同的数据更新集合
- 对数据库进行 AJAX 编辑时,我是否应该立即使用新数据更新接口
- 计划脚本以使用外部数据更新数据库
- 使用从 MongoDB 获取的新数据更新对象属性
- 如何每 n 分钟使用数据更新一次 Web 应用程序