<!-- vue兄弟组件 间传值
借助中央事件总线
1:在外部 建一个Bus.js,放在 assets文件夹下
Bus.js:
import Vue from 'Vue';
//平常写 都是 import Vue from 'vue'
export default new Vue;
//创建 空的Bus 组件
//vue-music App.vue 是
export default {
components:{
组件名
}
}
2.两个组件作为 子组件 被同一个 父组件所引用,在 同一个 页面显示
这个是 父组件:
import b1 from './b1.vue'
import b2 from './b2.vue'
components:{
b1,
b2
}
<div class="hello">
<b1></b1>
<b2></b2>
</div>
3.两个兄弟组件间的语法:
组件1 就当是 组件b1
b1 定义一个发送数据的 方法,
<button @click="sendMsg">向组件传值</button>
methods:{
sendMsg(){
Bus.$emit('send', this.a++)
}
}
点击触发 sendMsg 函数,函数主体,通过 Bus中央事件总线 用$emit发送 一个send事件 没错,是 send 事件
sendMsg 是点击事件 send是 发送出去,需要其他组件监听的事件
4.组件2 就当是 组件b2
组件2 在 data(){} 中定义一个变量 这个变量来接收 b1传过来的值(this.a++ 得到的值)
在created 生命周期中,通过 Bus中央事件总线 用$on监听 组件1 中 发送的send事件,用一个 带参数的 回调函数,接收
传过来的 值,参数 就是 传的值,把 值赋给 当前组件的变量
data(){
return(){
msg:"初始值"
}
},
created(){
var self=this
Bus.$on('send', function(val) {
self.msg = val;
})
}
别忘了 在 b1、b2 中引入 bus.js
import Bus from './bus.js'
//组件 可以 导入 js,( 不过 导入的方式…… 要给js 文件 起别名吗 )
js 也可以导入 组件(看 第一步中 bus.js)
总结:
通常 index.html 只有
<body><div id="app"></div></body>( 自动生成,不用写 什么)
main.js 中 有#app 的 vue实例
new Vue({
el:'#app',
router,
render:h=>h(App)
})
new Vue({}) 里 这三项 是肯定的
再一项项分析
先分析 App.vue
它是 整个h5的 布局
vue-cms 分三部分,而 vue-music 分四部分
言归正传 还是讲 vue-music
vue-music 需要切换的 就是 <router-view>
再是讲 router
呵呵,以上 都跑远了
父组件 传值 给 子组件:
-->
1.创建 Bus.js
import Vue from 'vue'
export default new Vue
2.父组件 引用 b1、b2组件
import b1 from './b1.vue'
import b2 from './b2.vue'
components:{
b1,
b2
}
3.b1
import bus from 'Bus.js'
import bus from './Bus'
<button @click="sendMsg"></button>
methods:{
sendMsg(){
bus.$emit('send', this.a++)
}
}
4.b2
import Bus from './bus.js'
如果 bus.js 这样写
import Vue from 'vue'
export default new Vue
import Bus from './bus'
如果 bus.js 这样写
import Vue from 'vue'
const bus = new Vue()
export default bus
别看,可能 都是错