189 8069 5689

详解Vue组件之间的数据通信实例

最近在用vue做项目,学习了不少东西,但是有时候光顾着做项目却忘记要找个时间来整理一下最近的一些学习新得,因为是新手,所以可能会有错误的地方,欢迎指出和交流呀~~~

从网站建设到定制行业解决方案,为提供网站制作、成都网站制作服务体系,各种行业企业客户提供网站建设解决方案,助力业务快速发展。成都创新互联将不断加快创新步伐,提供优质的建站服务。

关于父子组件以及非父子组件之间的数据通信

详解Vue组件之间的数据通信实例

1 父子组件之间数据通信

一般父组件向子组件传递数据用prop进行传递,注意,子组件不能对prop中的数据进行更改,vue中规定是防止子组件对父组件中的数据进行窜改。而子组件向父组件进行数据传递则可以通过事件触发父组件的事件来实现数据的传递。(是不是有点懵逼了,看个例子吧 )

(这里我就直接摘取一段项目中的例子代码来说明)

使用prop进行数据传递:

//这是父组件中的部分代码,父组件向子组件传递数据(method,dialogFormvisible)
 // 父组件的部分代码

   
新增员工
// 父组件的script代码 export default { data () { return { method:{handle: 'add‘, title: '增加员工'} dialogFormvisible: false } } } // 子组件中则需要加prop属性数据 ,如下所示: export default { props: [ 'method', 'dialogFormVisible'] } //所以只要父组件中的数据变化修改,子组件中的数据也会跟这修改;

在chrome中用vue-devtool其实也可以看到相关的数据属性;

详解Vue组件之间的数据通信实例

当然,子组件做完相关操作之后,需要时间的是将属性值dialogFormVisible重新修改为false。若是直接在子组件进行修改的话,就会报错,因为会影响到父组件的数据,vue中规定不能直接对prop的属性值进行修改。那么就可以用事件触发来实现子组件向父组件传递数据了。

详解Vue组件之间的数据通信实例

///父组件监听子组件的事件,通过@close="closeDialog"和@getEmployee="getEmployee"来实现监听;
一旦子组件中的事件close和getEmployee发生之后,就会触发父组件中的事件closeDialog和getEmployee事件。
// 父组件的部分代码
新增员工
//子组件中的事件分发 export default { methods: { // 关闭弹出框 closeDialog () { this.$emit('close', false) //这里就是直接触发子组件的close事件,一旦这个执行,父组件中的对应方法就会执行。 } } } // 当那边触发关闭事件的时候,这边的显示值就要关闭,那边会传过来一个false // 父组件的事件 export default { methods: { // 当那边触发关闭事件的时候,这边的显示值就要关闭,那边会传过来一个false closeDialog (val) { this.dialogFormVisible = val } } }

这样就实现了父子组件之间的数据传递;

2 实现非父子组件之间的数据传递

通过建立中间的事件bus总线。实现非父子组件之间的数据通信。

  1. 首先建立事件bus,我会新建一个bus.js文件;注册bus。
  2. 分别在组件中使用emit和on实现数据之间的通信;

1 bus.js文件

//bus.js,注册Bus
import Vue from 'vue'
export default new Vue()

2 组件emit触发事件