vue.js 之道vuex
2016-06-08 09:42
330 查看
:组件之间的作用域独立,而组件之间经常又需要传递数据。
例子:
A 为父组件,下面有子组件 B 和 C。
A 的数据可以通过 props 传递给 B 和 C。
A 可以通过 $broadcast 调用 B 和 C 的 events,从而操作 B 和 C 的数据。
B 和 C 可以通过 $dispatch 调用 A 的 events,从而操作 A 的数据。
当 B 需要操作 C 的数据就会比较麻烦,需要先 $dispatch 到 A,再 $broadcast 到 C。如果项目比较小的话还好,越大的项目,涉及的组件通信就越多、越频繁,此时管理起来就会非常累,而且容易出错。
这就是 Vuex 的意义所在。它可以将数据置于单独的一层,并提供给外部操作内部数据的方法。粗俗一点,就这样理解吧。
=== === ===
更新:
Vue 2 发布了,修改了组件之间的通信方式,已经不会出现通信事件 ping-pong 的情况了。我们需要有一个 Vue 实例来充当通信媒介的作用,Vue 官方文档里将它叫做 event bus。
当我们需要组件之间事件通信的时候,只需要对这个 event bus 使用 $emit 和 $on 就可以了。
借助这样的改动,使得事件不再依靠事件链去传播,而是统一的在 event bus 中分发。但值得注意的是,发射事件和监听事件的代码是分散在各个组件中的,如果他们的复杂度让你难以把控,就需要 Vuex 登场了。
例子:
A 为父组件,下面有子组件 B 和 C。
A 的数据可以通过 props 传递给 B 和 C。
A 可以通过 $broadcast 调用 B 和 C 的 events,从而操作 B 和 C 的数据。
B 和 C 可以通过 $dispatch 调用 A 的 events,从而操作 A 的数据。
当 B 需要操作 C 的数据就会比较麻烦,需要先 $dispatch 到 A,再 $broadcast 到 C。如果项目比较小的话还好,越大的项目,涉及的组件通信就越多、越频繁,此时管理起来就会非常累,而且容易出错。
这就是 Vuex 的意义所在。它可以将数据置于单独的一层,并提供给外部操作内部数据的方法。粗俗一点,就这样理解吧。
=== === ===
更新:
Vue 2 发布了,修改了组件之间的通信方式,已经不会出现通信事件 ping-pong 的情况了。我们需要有一个 Vue 实例来充当通信媒介的作用,Vue 官方文档里将它叫做 event bus。
export default new Vue();
当我们需要组件之间事件通信的时候,只需要对这个 event bus 使用 $emit 和 $on 就可以了。
import Bus from './bus.js'; export default Vue.extend({ template: ` <div>{{msg}}</div> `, data: () => ({ msg: 'Hello World!' }), created() { Bus.$on('setMsg', content => { this.msg = content; }); } });
import Bus from './bus.js'; export default Vue.extend({ template: ` <div @click="sendEvent">Say Hi</div> `, methods: { sendEvent() { Bus.$emit('setMsg', 'Hi Vue!'); } } });
借助这样的改动,使得事件不再依靠事件链去传播,而是统一的在 event bus 中分发。但值得注意的是,发射事件和监听事件的代码是分散在各个组件中的,如果他们的复杂度让你难以把控,就需要 Vuex 登场了。
相关文章推荐
- iOS App开发中的UISegmentedControl分段组件用法总结
- Gradle Build速度加快终极方法
- 用array_count_values统计一篇英文文档中每个单词的出现次数,结果用表格展示出来
- 解析:使用easyui的form提交表单,在IE下出现类似附件下载时提示是否保存的现象
- select下拉列表(easyui)
- UICollectionView 很简单的写个瀑布流
- 开源Mapguide3.1预览版发布了
- nui UI 具有右键属性的菜单树
- JSP中自定义标签(结合easyui)——JSP中的TAG
- Java中break与continue用法
- 判断 Map 中是否包含指定的 key 和 value
- MySQL提示:The server quit without updating PID file问题的解决办法
- 数据类型 uint8_t
- NGUI3.6适配的一种方法
- BuildYourOwnLisp Why we need pointer 为什么我们需要指针
- Build Your Own Lisp chapter4的小错误 error: editline/history.h: No such file or directory的解决
- LeetCode Repeated DNA Sequences的一点疑惑
- BuildYourOwnLisp Why we need enum
- UICollectionViewcell 不显示
- UIKit: 动态生成label