组件之间互相通信的方法
- 父组件向子组件传值
- 子组件向父组件传值
- 非父子组件通信
父组件向子组件传值
- 使用props属性进行传值
示例
父组件
1 | <div id="c-box"> |
1 | <script> |
子组件
1 | props: ['changeState'] |
注意使用props属性,父组件可以给子组件传值,但是子组件不可以修改父组件给子组件传的值。这里,子组件不可以修改changeState的值。这里需要通过子组件触发事件来通知父组件改变数据。
子组件向父组件传值
- 子组件内使用this.$emit(‘fn’, data)
示例
这里做一个小demo,子组件的state的值从0开始累加。父组件有一个按钮,点击按钮子组件的state值从0开始重新累加.
父组件:
1 | <template> |
1 | <script> |
子组件
1 | <template> |
非父子组件传值
- 在根组件放空的vue实例,让所有的子组件都可以调用(这个作为一个中转站),对于不是父子组件的componentC和componentD。componentE调用事件触发(.$emit(‘fn’,123)),componentE调用事件接收(.$on(‘fn’,value => {}))
示例
根组件
1 | new Vue({ |
componentC
1 | <button @click="submit">提交</button> |
componentE
1 | created () { |