总结: 非父子组件传值的步骤:
1,在全局作用域下创建一个空的vue对象, 作为总线bus
var bus = new Vue();
2, 在接收数据的组件初始化函数中使用bus.$on监听自定义事件
bus.$on(“myevent”, data=>{ this.name = data })
3, 在发送数据的组件中, 使用bus.$emit发射/触发自定义事件,把数据发出去
bus.$emit(“myevent”, e.target.value)
注意: 第二步监听必须在第三步发射之前执行, 否则借不到数据, 如
在created中bus.$emit, 在mounted中bus.$on则肯定接不到数据
在created中bus.$emit, 在created中bus.$on则不一定接到数据
<body><script src='https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js'></script><div id='myApp'>组件1: <my-com1></my-com1> <hr>组件2: <my-com2></my-com2></div><script>// 1,在全局作用域下创建一个空的vue对象, 作为总线bus, 相当于一个桥梁连接两个不同的组件, bus在任意组件中都可以调用var bus = new Vue();Vue.component('myCom1', {template: '<div><input @input="send"></div>',methods:{send(e){// 3,在发送数据的组件中, 使用bus.$emit发射/触发自定义事件,把数据发出去bus.$emit("myevent", e.target.value)}}})Vue.component('myCom2', {template: '<div><h1>{{name}}</h1></div>',data(){ return {name: ""} },created() {// 2, 在接收数据的组件初始化函数中使用bus.$on监听自定义事件, 在事件函数中接收数据bus.$on("myevent", data=>{// 注意用箭头函数,否则this指向busthis.name = data})},})new Vue({el: '#myApp'})</script></body>
