博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Vue2.0组件通信(非Vuex)
阅读量:4085 次
发布时间:2019-05-25

本文共 2298 字,大约阅读时间需要 7 分钟。

最近学了Vue2.0,写写自己的一点总结,关于父子组件通信的,这点对于我来说,是看文档的时候比较难理解的。通过网上找资料和实践,也有一点理解。

例子使用以下代码模板

{

{total}}

父组件传数据给子组件

当子组件需要父组件传递的数据时,子组件要设置props,来接收父组件传递过去的值。
在这里父组件传递的是total,子组件设置props[numA,numS],接着在调用子组件的时候将父组件的数据传递过去,如下

这样就可以子组件'child'就能接收到父组件(也就是挂载在 app上的)的数据。

关于props的写法有多种,具体请看

父子通信-动态数据

有时候我们想实现父组件的数据能动态的传递给子组件,使用v-model来实现

...props: { numA: [String, Number]}

子组件与父组件通信

有时候我们想要实现子组件调用父组件,那要怎么做呢?
我们可以通过触发事件来通知父组件改变数据。

父组件:

//监听子组件触发的add事件,然后调用incrementTotal方法
methods: { incrementTotal() { this.total +=1 }}

子组件:

components:{    'child' :{        template:'#myChild',        data : function(){            return{                counter : 0            }        },        props:['numA','numS'],        methods:{            add : function(){                this.counter +=1                this.$emit('add') //子组件通过 $emit触发父组件的方法add            }        }    }}

子组件执行add方法 => 触发$emit => 触发父组件add方法 => 执行 incrementTotal 方法 => 完成

父组件调用子组件

通过给子组件设置ref,可以很方便的获取到子组件,然后改变子组件。

new Vue({    el:'#app',    data :{        total: 0              },    methods:{        incrementTotal : function(){            this.total += 1        },        clickref:function(){            let childRef = this.$refs.childTest //获取子组件                childRef.counter = 1221         //改变子组件的数据                childRef.add(11)                //调用子组件的方法        }    },    components:{        'child' :{            template:'#myChild',            data : function(){                return{                    counter : 0                }            },            props:['numA','numS'],            methods:{                add : function(num){                    this.counter +=1                    this.$emit('add')                    console.log('接收父组件的值':+ num)                }            }        }    }});

子组件与子组件通信

如果2个组件不是父子组件那么如何通信呢?
这时可以通过eventHub来实现通信,
所谓eventHub就是创建一个事件中心,相当于中转站,可以用它来传递事件和接收事件。(或者使用vuex)

let eventHub = new Vue(); //创建事件中心

组件1触发:

methods: { eve() { eventHub.$emit('change','hehe'); //eventHub触发事件 }}

组件2接收:

created() { eventHub.$on('change', () => { //eventHub接收事件 this.msg = 'hehe'; });}

这样就实现了非父子组件之间的通信了,原理就是把Hub当作一个中转站!

总结

例子代码:
参考:

转载地址:http://wqhni.baihongyu.com/

你可能感兴趣的文章
F330装GPS的位置
查看>>
pixhawk也可以用Airsim仿真
查看>>
《无人机电机与电调技术》可以看看
查看>>
我发现七月在线的GAAS课程基本都讲到了
查看>>
电机堵转
查看>>
carzepony也在想往FreeRTOS上迁移
查看>>
可以买个好点的电烙铁
查看>>
ACfly调参记录(包括ACfly-F330和ACfly-T265)
查看>>
一定记得每飞几次或者隔一天要把螺丝和浆帽拧一次,确实会松的
查看>>
《多旋翼无人飞行器嵌入式飞控开发指南》里基于FreeRTOS的无人机软件框架
查看>>
思岚A1的SDK其实很好读懂,每个函数清晰明了,可以直接调用
查看>>
pixhawk(PX4)的一些论坛网站(包括中文版的PX4用户手册和PX4开发手册)
查看>>
串级 PID 为什么外环输出是内环的期望?(和我之前对串级PID的总结一样)
查看>>
我刚刚才完全清楚GPS模块的那根杆子是怎么固定安装好的
查看>>
去github里面找找也没有别人无人机+SLAM的工程
查看>>
PX4与ROS关系以及仿真控制(键盘控制无人机)
查看>>
我对无人机重心高度的理解
查看>>
现在明白为什么无名博客里好几篇文章在讲传感器的滞后
查看>>
实际我看Pixhawk定高模式其实也是飞得很稳,飘得也不厉害
查看>>
Pixhawk解锁常见错误
查看>>