考虑一个允许显示/编辑博客文章的VUEJS应用程序.

  • 单击"编辑博客帖子"会显示一个模式(Vue组件)来编辑当前的博客帖子(只是一个普通的js对象).
  • 为此,我将当前的blogpost作为prop传递给modal组件.
  • 模态组件有几个表单字段,应该用blogpost属性填充它们.
  • 然而,Vue的"方式"是在模态组件上有一个data对象,作为填充表单字段的模型,反之亦然,当用户更改表单字段时,该对象将被更新.

问题:如何将作为prop传递的blogpost连接到modal组件的data字段,以便:

  • blogpost填充表单字段
  • 更新表单字段时,blogpost会得到更新

正确的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
});

如果blogpost组件和modal组件不在同一个层次 struct 中,事情会变得更复杂,可能需要公共父元素作为代理.想象一下,modal元素dispatching将信息向上传输,#app元素通过$on捕捉信息,然后对blogpost元素执行$broadcast操作.

3) 使用vuex之类的工具作为状态的中央存储库.我不知道你的应用程序有多大,但这将是最干净的方式:http://vuex.vuejs.org/en/index.html

祝你好运

Vue.js相关问答推荐

Vuetify/Vue3 插槽模板之间的阴影

为什么 Vue 在将设置脚本中的计算(computed)属性渲染到模板时找不到变量

如何在vue js模板中添加foreach和for循环

Vuetify 扩展面板,面板标题左侧带有图标

实现登录命令并访问 vuex 存储

使用 vuex 更新数据

在 jest document.querySelector 中测试 vue 组件期间始终返回 null

Laravel Vue - 如何让 vue 在公共文件夹中查找图像

如何将 vue.js 与 gulp 一起使用?

Polyfill for ie

当前端和后端位于虚拟 docker 网络中时,如何使用 axios 寻址后端主机

如何像 React 中的 {...props} 一样在 Vue 中解构 props?

在 v-for 循环中使用 v-model

在组件之间共享数据

VueJS错误编译模板

有没有办法知道组件实例何时挂载?

模块构建失败:错误:没有给出解析器和文件路径,无法在 nuxtjs 中推断出解析器

我如何能够在 vue js html 中以给定格式进行多项 Select 和传递数据?

依赖关系甚至在 package.json 和 node_modules 中都没有定义

Vuex 模块Mutations