总结 -- vue组件通信系列

448 阅读1分钟

vue组件的数据通信方式很多,本篇汇总所有的方式一起说说,水平有限,不对的话,欢迎指正。

所谓的组件通信,就是一个组件获取另外一个组件的数据或者方法。

先看看所有的方式,8种吧:

这么多方式,怎么选择呢。

首先,有个原则性的大判断,是不是在封装组件

不是封装组件,只是普通使用组件的话

只是普通使用组件,而不是封装组件的话,一般只会用以下方式:

  • props/$emit
  • ref/$refs
  • slot的作用域
  • eventBus
  • vuex

再继续,是不是父子组件。

父子组件的话:

  • 首选,prop/$emit,必要时结合语法糖.syncv-model
  • 只想,显示子组件/第三方组件的数据 或者 执行其工具方法,可考虑选择ref/$refs
  • 子组件或者第三方组件内部提供了,slot作用域数据的话,自然考虑到slot方式

跨组件的话:数据不复杂用eventBus,复杂用vuex

封装组件的话

封装组件,甚至嵌套组件的情况下

  • 封装第三方组件 或者 一些简单的表单组件,可考虑$attrs/$listeners
  • 组件内部嵌套层级不确定,后代组件想要祖先组件数据的话,可考虑provide/inject
  • 组件内部嵌套关系明确,且只是显示 上下组件的数据 或者 执行其工具方法,可考虑$children/$parent

练习

可以用这个,练习下,手写el-form的核心逻辑