在项目开发中,组件之间的关系分为如下3种:
父子组件之间的数据共享又分为:
父 -> 子
共享数据子 -> 父
共享数据父 <-> 子
双向数据同步父组件通过v-bind属性绑定
向子组件共享数据。同时,子组件需要使用props
接收数据。示例代码如下:
子组件通过自定义事件
的方式向父组件共享数据。示例代码如下:
父组件在使用子组件期间,可以使用v-model指令
维护组件内外数据的双向同步:
兄弟组件之间
实现数据共享的方案是EventBus
。可以借助于第三方的包mitt
来创建 eventBus对象
,从而实现兄弟组件之间的数据共享。示意图如下:
在项目中运行如下的命令,安装mitt依赖包:
npm install mitt@2.1.0
在项目中创建公共的eventBus模块
如下:
数据接收方
自定义事件在数据接收方,调用bus.on
(‘事件名称’, 事件处理函数)方法注册一个自定义事件
。示例代码如下:
数据接发送方
触发事件在数据发送方,调用bus.emit
(‘事件名称’, 要发送的数据)方法触发自定义事件
。示例代码如下:
后代关系组件之间共享数据,指的是父节点的组件
向其子孙组件
共享数据。此时组件之间的嵌套关系比较复杂,可以使用provide
和inject
实现后代关系组件之间的数据共享。
provide
共享数据父节点的组件可以通过provide方法
,对其子孙组件
共享数据:
inject
接收数据子孙节点可以使用inject
数组,接收父级节点向下共享的数据
。示例代码如下:
响应式的数据
父节点使用provide向下共享数据时,可以结合computed函数
向下共享响应式的数据
。示例代码如下:
使用
响应式的数据如果父级节点共享的是响应式的数据
,则子孙节点必须以.value
的形式进行使用。示例代码如下:
vuex是终极的
组件之间的数据共享方案。在企业级的vue项目开发中,vuex可以让组件之间的数据共享变得高效
、清晰
、且易于维护
。
属性绑定
事件绑定
组件上的v-model
EventBus
provide
&inject
vuex