正确的vueJS方式来同步道具和数据
proper vueJS way to sync props with data
考虑一个允许显示/编辑博客文章的VueJS应用程序。
- 点击"编辑博客文章",会显示一个模态(Vue组件)来编辑当前博客文章(只是一个普通的js对象)
- 为此,我将当前的博客文章作为
prop
传递给模态组件 - Modal组件有几个表单字段,这些字段应该填充博客文章属性
- 然而,Vue的"方法"是在Modal组件上有一个
data
对象,该对象充当填充表单字段的模型,反之亦然,当用户更改表单字段时更新
问题:我如何将作为prop
传递的博客文章连接到模态组件的data
字段,以便:
- 博客文章填充表单字段
- 博客文章在更新表单字段时得到更新
Vue实现这一目标的正确方法是什么?
至少有三种方法:
1) 与您所做的一样,通过prop
属性连接数据,但要将.sync
属性添加到其中。这样,当在表单上修改数据时,它也会自动在组件上进行修改。此解决方案的问题是更新是自动的,因此,如果验证失败,或者用户关闭模态而不保存更改,则无论如何都会保存这些更改。例如:https://jsfiddle.net/Lz3aq64f/
2) 另一种方法是在$dispatch
事件保存时获取该事件的模式,该事件包含已保存的信息。blogpost元素应该监听这个事件并采取相应的行动。
关于模态:
this.$dispatch('update-post', this.title, this.author);
在博客上:
this.$on('update-post', function(title, author) {
this.title = title;
this.author = author
});
如果博客文章组件和模态组件不在同一层次结构中,事情会变得有点复杂,并且可能需要通用的父元素来充当代理。想想modal
元素dispatching
的信息,#app
元素通过$on
捕获它,然后对blogpost
元素执行$broadcast
。
3) 使用类似vuex
的东西作为状态的中央存储库。我不知道你的应用程序有多大,但这将是最干净的方法:http://vuex.vuejs.org/en/index.html
祝你好运!
相关文章:
- 在控制器和数据对象之间同步数据
- 如何将Knockout.JS与服务器已经在DOM中呈现的数据同步
- 异步获取数据使用JavaScript同步获取数据
- 将数据发布到iframe是同步还是异步
- 如何同步数据属性并选择框值
- node.js和hapi:同步从数据库中获取数据
- 将数据从本地SQL Server同步到Internet上的MySQL Server(实时服务器)
- 通过服务在控制器之间同步数据
- 如何同步检测用户是否拒绝访问地理位置数据
- 如何在两个不同的选项卡(jQuery数据表)上同步处理可排序表
- 重新解析角度路由数据并保持数据同步
- 与node.js同步写入非常大的数据块
- 同步 php 和 javascript 以在 SQL 数据库中发送数据
- 在 CRM 2011 中同步使用 JavaScript 获取元数据
- 离线应用中的数据同步
- Jquery PHP mySQL ajax方法将数据同步到两个客户端
- 自定义指令控制器数据与工厂数据同步
- EmberJS -保持模型与本地存储中的数据同步
- d3.js只加载部分数据/同步数据
- 使用AngularJS和Symfony 2进行在线/离线数据同步的最佳实践