本文主要和大家分享4種Vue元件通訊方式:父子元件的通訊、非父子元件的eventBus通訊、利用本機快取實作元件通訊、Vuex通訊。希望能幫助大家。
第一種通訊方式:父子元件通訊
#父元件總共需要做4件事
1.import son from './son.js' 引入子元件son
2.在components : { "son"} 裡註冊所有子元件名稱
3.在父元件的template應用子元件,
#4.如果需要傳遞資料給子元件,就在template模板裡寫
// 1.引入子组件 import counter from './counter' import son from './son'
// 2.在ccmponents里注册子组件 components : { counter, son },
// 3.在template里使用子组件 <son></son>
子元件只需要做1件事
1.用props接受資料,就可以直接使用資料
#1.用props接受資料,就可以直接使用資料
// 4.如果需要传递数据,也是在templete里写 <counter :num="number"></counter>#
// 1.用Props接受数据 props: [ 'num' ],##子元件傳遞資料元件向父元件所示給父元件一樣給父元件子元件傳送資料給父元件
// 2.如果需要修改得到的数据,可以这样写 props: [ 'num' ], data () { return { number : this.num } },
// 1. 在templete里应用子组件时,定义事件changeNumber <counter :num="number" @changeNumber="changeNumber" > </counter>
思考
在資料變更後,用$emit觸發即可
// 2. 用changeNumber监听事件是否触发 methods: { changeNumber(e){ console.log('子组件emit了',e); this.number = e }, }第二種通訊方式: eventBus
3.在元件2裡,this. $root.Bus.$on監聽事件
// 1. 子组件在数据变化后,用$emit触发即可,第二个参数可以传递参数 methods: { increment(){ this.number++ this.$emit('changeNumber', this.number) }, }
// 1.在main.js里给app组件,添加bus属性import Vue from 'vue'new Vue({ el: '#app', components: { App }, template: '<App/>', data(){ return { Bus : new Vue() } } })
// 2.在组件1里,触发emitincrement(){ this.number++ this.$root.Bus.$emit('eventName', this.number) },
// 3.在组件2里,监听事件,接受数据mounted(){ this.$root.Bus.$on('eventName', value => { this.number = value console.log('busEvent'); }) },中之前使用中這樣溝通方式) #rrrereeesion#3 月來說明這種溝通方式:狀態比較混亂,不太容易維持。 透過window.localStorage.getItem(key) 取得資料
以上是4種Vue組件通訊方式實例分享的詳細內容。更多資訊請關注PHP中文網其他相關文章!