日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

Vue如何實(shí)現(xiàn)組件間通信

瀏覽:21日期:2022-09-29 15:43:55
目錄1. 父子間通信1.1 父組件 --> 兒子組件1.2 兒子組件 --> 父組件2. 爺孫間通信3. 任意組件間通信3.1 EventBus3.2 Vuex1. 父子間通信

最常見的就是父子之間的通信,通信是雙向的數(shù)據(jù)傳遞。

1.1 父組件 --> 兒子組件

父組件向兒子組件傳遞數(shù)據(jù)的方式就是 通過(guò) Prop 向子組件傳遞數(shù)據(jù)。

//child.vue<template> <div>我是兒子,我收到來(lái)自父親的數(shù)據(jù)為 {{value}} </div></template><script>export default { props:{value: String }}

//App.vue<template> <div id='app'> <Child :value='x' /> </div></template><script>import Child from ’./components/Child’export default { data(){ return { x: ’hi,child’ } }, components:{ Child }}</script>1.2 兒子組件 --> 父組件

兒子組件向父組件傳遞數(shù)據(jù)的方式就是通過(guò)子組件內(nèi) $emit 觸發(fā)自定義事件,子組件使用時(shí) v-on 綁定監(jiān)聽自定義事件。

這里的 v-on 事件通信是在子組件使用時(shí)作為子組件的事件屬性自動(dòng)進(jìn)行監(jiān)聽的。

因此兒子組件向父組件傳遞數(shù)據(jù),依賴于子組件使用時(shí)的自定義事件屬性。

//child.vue<template> <div>我是兒子,我收到來(lái)自父親的數(shù)據(jù)為 {{value}}<button @click='sayHi'> 向父組件打招呼</button> </div></template><script>export default { props:{value: String }, methods:{sayHi(){ this.$emit(’sayHi’,’hi,parent!’);} }}</script>

//App.vue<template> <div id='app'> 我是父組件,我收到子組件傳來(lái)的數(shù)據(jù)為 {{y}} <Child :value='x' @sayHi='y = $event'/> </div></template><script>import Child from ’./components/Child’export default { data(){ return { x: ’hi,child’, y: ’’ } }, components:{ Child }}</script>

Vue如何實(shí)現(xiàn)組件間通信

2. 爺孫間通信

爺孫間通信,可以使用兩次 v-on 通信,爺爺爸爸通信,然后爸爸兒子通信。

也可使用下方的任意組件間通信的方式。

3. 任意組件間通信

任意組件間通信就不再區(qū)分是 A 向 B 通信,還是 B 向 A 通信,而是通用的方式,誰(shuí)想發(fā)送數(shù)據(jù)就使用對(duì)應(yīng)的 API 發(fā)送數(shù)據(jù),誰(shuí)想要接收什么數(shù)據(jù),就使用對(duì)應(yīng)的 API 接收。

任意組件間通信有兩種方式,一種是使用 EventBus 發(fā)布訂閱模式通信,一種是使用 Vuex 通信。

3.1 EventBus

EventBus ,從字面意思理解就是事件公交車,所有觸發(fā)的事件傳遞的數(shù)據(jù)都從前門上車保存到公交車上,然后通過(guò)監(jiān)聽對(duì)應(yīng)事件提供的出口讓對(duì)應(yīng)的事件數(shù)據(jù)下車。

EventBus,實(shí)際意思是發(fā)布和訂閱模式,就是誰(shuí)想把數(shù)據(jù)傳遞出去,就要通過(guò)觸發(fā)自定義事件的 API 進(jìn)行數(shù)據(jù)的發(fā)布;誰(shuí)需要接收該數(shù)據(jù)信息的,就通過(guò)事件監(jiān)聽的 API 進(jìn)行數(shù)據(jù)的監(jiān)聽,一旦檢測(cè)到監(jiān)聽的數(shù)據(jù)發(fā)布出來(lái),就會(huì)接收,這就是數(shù)據(jù)的訂閱。

EventBus 通信方式最重要是搞明白發(fā)布和訂閱的接口 API,在 Vue 中,Vue 實(shí)例有提供兩個(gè)接口,即 $emit 和 $on ,因此可以新創(chuàng)建一個(gè)空的 Vue 實(shí)例,來(lái)獲得這兩個(gè)接口。

const eventBus = new Vue();eventBus.$emit(eventName, […args]) //發(fā)布事件eventBus.$on(event, callback) //訂閱事件

實(shí)例如下:

// eventBus.jsimport Vue from ’vue’export const eventBus = new Vue();

//child<template> <div>我是兒子,我收到來(lái)自父親的數(shù)據(jù)為 <strong>{{value}}</strong><button @click='sayHi'> 向父組件打招呼</button><button @click='sibling'> 向兄弟組件打招呼</button> </div></template><script>import {eventBus} from ’../eventBus.js’export default { props:{value: String }, methods:{sayHi(){ this.$emit(’sayHi’,’hi,parent!’);},sibling(){ eventBus.$emit(’sibling’,’hi,brother’);} }}</script><style scoped> strong{color: red; }</style>

//sibling<template> <div>我是兄弟組件,我收到來(lái)自兒子組件的數(shù)據(jù)信息為 <strong>{{x}}</strong> </div></template><script>import {eventBus} from ’../eventBus.js’export default { data(){return { x: ’’} }, mounted(){eventBus.$on(’sibling’, (msg)=>{ this.x = msg;}) }}</script><style scoped> strong{ color: green; }</style>

//parent<template> <div id='app'> 我是父組件,我收到子組件傳來(lái)的數(shù)據(jù)為 <strong>{{y}}</strong> <Child :value='x' @sayHi='y = $event'/> <Sibling></Sibling> </div></template><script>import Child from ’./components/Child’import Sibling from ’./components/Sibling’export default { data(){ return { x: ’hi,child’, y: ’’ } }, components:{ Child, Sibling }}</script><style scoped> strong{ color: blue; }</style>

Vue如何實(shí)現(xiàn)組件間通信

關(guān)于 EventBus 這部分,可能存在這樣一個(gè)疑問(wèn),既然 Vue 實(shí)例中都有 $emit 和 $on,為什么不直接用 this.$emit 觸發(fā)事件, this.$on 接收事件呢?還非得要額外一個(gè)空實(shí)例 eventBus = new Vue() 。那是因?yàn)椋琕ue 中每個(gè)組件都是一個(gè)單獨(dú)的 Vue 實(shí)例,你在這個(gè) Vue 實(shí)例中觸發(fā)該實(shí)例的 emit 事件,另外一個(gè)實(shí)例的 on 事件是接收不到的,不在一輛公交車上,怎么能進(jìn)行事件通信呢?因此就必須要一個(gè)公共的公交車,也就是事件總線。

上述實(shí)例中的 eventBus 的使用方法是局部的 eventBus,誰(shuí)要用到 eventBus 要自己手動(dòng)引入。也可以將 eventBus 做成全局的,比如掛在 vue 的原型上。

//main.jsimport Vue from ’vue’import App from ’./App.vue’Vue.config.productionTip = falseVue.prototype.$eventBus = new Vue();//添加這句,一定要在下方的 new Vue 前。new Vue({ render: h => h(App),}).$mount(’#app’)

//childsibling(){ this.$eventBus.$emit(’sibling’,’hi,brother’);}

//siblingmounted(){ this.$eventBus.$on(’sibling’, (msg)=>{this.x = msg; })}

除了上述的添加屬性到 Vue 原型的方式外,還可以使用 Object.defineProperty() 為 Vue 原型添加屬性。

import Vue from ’vue’import App from ’./App.vue’Vue.config.productionTip = falselet eventBus = new Vue()Object.defineProperty(Vue.prototype,’$eventBus’,{ get(){ return eventBus }})new Vue({ render: h => h(App),}).$mount(’#app’)3.2 Vuex

Vue 組件間的通信也可使用專門為 vue.js 應(yīng)用程序開發(fā)的狀態(tài)管理模式:Vuex。Vuex 的使用比較復(fù)雜,詳細(xì)可見 Vuex 博客。Vuex 適用于大型的復(fù)雜的 Vue 項(xiàng)目的狀態(tài)管理。對(duì)于一些中小型的應(yīng)用程序,可以根據(jù) Vuex 的原理自定義 store 模式進(jìn)行狀態(tài)管理,vue 自定義狀態(tài)管理,可詳見 Vue 簡(jiǎn)單狀態(tài)管理—store模式 博客。

無(wú)論是 Vuex 還是 自定義 store模式 ,其實(shí)現(xiàn)組件間通信的原理都是通過(guò)共享數(shù)據(jù)的方式實(shí)現(xiàn)的。組件間使用相同的數(shù)據(jù)源,當(dāng)一個(gè)組件改變數(shù)據(jù)時(shí),另一個(gè)組件依賴的數(shù)據(jù)源也就改變了。

以上就是Vue如何實(shí)現(xiàn)組件間通信的詳細(xì)內(nèi)容,更多關(guān)于Vue組件間通信的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Vue
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日韩欧美2区| 亚洲综合电影| 丝袜脚交一区二区| 久久精品高清| 激情婷婷欧美| 在线一区欧美| 日韩亚洲在线| 视频一区免费在线观看| 丝袜美腿成人在线| 日韩高清欧美激情| 国产精品一区二区三区美女| 国产精品欧美大片| 国产精品mm| 福利欧美精品在线| 欧美sss在线视频| 欧美日一区二区| 黄色成人91| 亚洲免费中文| 日本aⅴ亚洲精品中文乱码| 欧美亚洲网站| 国产精品久久久久久妇女| 国产精品欧美大片| av资源新版天堂在线| 久久久人人人| 国产午夜精品一区二区三区欧美| 蜜臀av性久久久久蜜臀aⅴ流畅| 亚洲va久久久噜噜噜久久| 久久99性xxx老妇胖精品| 日本а中文在线天堂| 美女少妇全过程你懂的久久| 蜜桃久久av一区| 国产精品久久乐| 国产麻豆久久| 午夜亚洲福利| 国产精品成久久久久| 欧美精选一区二区三区| 美国三级日本三级久久99| 国产精品99久久免费观看| 久久久国产亚洲精品| 亚洲午夜免费| 精品午夜视频| 香蕉国产精品| 国产日韩在线观看视频| 快播电影网址老女人久久| 香蕉久久国产| 久久精品伊人| 欧美日韩国产在线一区| 91精品国产自产观看在线| 精品国产精品国产偷麻豆| 亚洲精品888| 国产欧美精品| 青青青免费在线视频| 亚洲涩涩av| 国产91在线播放精品| 亚洲一区国产| 麻豆91在线播放| 99热精品在线观看| 欧美成人精品一级| 亚洲二区三区不卡| 久久精品色播| 免费成人在线视频观看| av资源亚洲| 国产丝袜一区| 亚洲激情欧美| 精品视频在线你懂得| 亚洲一二三区视频| 精品理论电影在线| 蜜臀久久久99精品久久久久久| 色综合狠狠操| 日韩精品一区二区三区av | 国产视频一区三区| 久久精品五月| 综合激情视频| 99精品在线观看| 国产精品久久久久77777丨| 一区免费在线| 精品国产鲁一鲁****| 日本成人手机在线| 久久国产电影| 久久精品一区二区三区中文字幕| 国产亚洲一区在线| 日本蜜桃在线观看视频| 国产免费播放一区二区| 水野朝阳av一区二区三区| 免费一二一二在线视频| 国产午夜一区| 男人的天堂亚洲一区| 国产91欧美| 国产欧美日韩亚洲一区二区三区| 宅男噜噜噜66国产日韩在线观看| 欧美国产小视频| 欧美黑人巨大videos精品| 亚久久调教视频| 久久国产精品亚洲77777| 91精品国产调教在线观看| 久久99久久久精品欧美| 天堂俺去俺来也www久久婷婷| 亚洲深爱激情| 亚洲香蕉网站| 午夜久久中文| 国产91欧美| 麻豆精品久久久| 国产精品激情电影| 91亚洲无吗| 日本不卡一区二区三区| 久久av在线| 激情婷婷综合| 欧美不卡在线| 欧美+日本+国产+在线a∨观看| 日韩伦理一区| 欧美激情国产在线| 日本精品黄色| 美腿丝袜亚洲三区| 国产精品一卡| 国产视频网站一区二区三区| 日韩高清欧美激情| 日韩高清一区在线| 日韩激情啪啪| 天堂俺去俺来也www久久婷婷| 伊人国产精品| 亚洲精品在线二区| 日韩精品一区二区三区免费视频| 日韩黄色av| 日韩avvvv在线播放| 国产欧美日韩在线观看视频 | 日韩av在线播放网址| 精品日韩一区| 中文字幕在线高清| 99久久www免费| 波多野结衣一区| 欧美日韩激情| 日av在线不卡| 日韩av不卡一区二区| 国产精品久久久亚洲一区| 精品久久网站| 视频福利一区| 狠狠干综合网| 蜜桃久久久久久久| 日本免费一区二区视频| 欧美激情aⅴ一区二区三区| 精品三区视频| 久久国产亚洲| 一区二区国产在线观看| 国产视频一区二区在线播放| 国产成人免费精品| 久久精品国产亚洲夜色av网站| 亚洲免费高清| 天海翼亚洲一区二区三区| 美女久久精品| 久久蜜桃资源一区二区老牛| 欧美日韩国产一区二区三区不卡| 鲁大师影院一区二区三区| 亚洲精品系列| 国产精品久久久久久模特| 亚洲1234区| 免费日韩av片| 国产精品一级| 久久九九电影| 喷白浆一区二区| 国产精品啊v在线| 免费污视频在线一区| 丝袜脚交一区二区| 欧美黄色精品| 亚洲香蕉网站| 欧美日韩一区二区三区四区在线观看 | 国产日韩欧美中文在线| 欧美亚洲一级| 国产精品成人一区二区不卡| 五月婷婷亚洲| 国产亚洲字幕| 中文另类视频| 日韩av中文字幕一区| av免费不卡国产观看| 亚洲在线一区| 国产精品网在线观看| 性感美女一区二区在线观看| 亚洲精品字幕| 精品视频网站| 国产高清一区| 欧美啪啪一区| 欧美日韩一二| 亚洲精品系列| 日韩欧美精品| 亚洲精品美女91| 日韩高清欧美| 日韩精品视频中文字幕| 视频福利一区| 国产精品一区二区三区av| 黄色欧美在线| 中文一区在线| 精品久久不卡| 最新国产精品| 午夜精品成人av| 免费观看在线综合色| 麻豆国产精品一区二区三区 | 亚洲天堂久久| 精品国产美女a久久9999| 亚洲伊人精品酒店| 日韩精品电影| 国产九九精品|