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

您的位置:首頁技術文章
文章詳情頁

Vue如何實現組件間通信

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

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

1.1 父組件 --> 兒子組件

父組件向兒子組件傳遞數據的方式就是 通過 Prop 向子組件傳遞數據。

//child.vue<template> <div>我是兒子,我收到來自父親的數據為 {{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 兒子組件 --> 父組件

兒子組件向父組件傳遞數據的方式就是通過子組件內 $emit 觸發自定義事件,子組件使用時 v-on 綁定監聽自定義事件。

這里的 v-on 事件通信是在子組件使用時作為子組件的事件屬性自動進行監聽的。

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

//child.vue<template> <div>我是兒子,我收到來自父親的數據為 {{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'> 我是父組件,我收到子組件傳來的數據為 {{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如何實現組件間通信

2. 爺孫間通信

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

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

3. 任意組件間通信

任意組件間通信就不再區分是 A 向 B 通信,還是 B 向 A 通信,而是通用的方式,誰想發送數據就使用對應的 API 發送數據,誰想要接收什么數據,就使用對應的 API 接收。

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

3.1 EventBus

EventBus ,從字面意思理解就是事件公交車,所有觸發的事件傳遞的數據都從前門上車保存到公交車上,然后通過監聽對應事件提供的出口讓對應的事件數據下車。

EventBus,實際意思是發布和訂閱模式,就是誰想把數據傳遞出去,就要通過觸發自定義事件的 API 進行數據的發布;誰需要接收該數據信息的,就通過事件監聽的 API 進行數據的監聽,一旦檢測到監聽的數據發布出來,就會接收,這就是數據的訂閱。

EventBus 通信方式最重要是搞明白發布和訂閱的接口 API,在 Vue 中,Vue 實例有提供兩個接口,即 $emit 和 $on ,因此可以新創建一個空的 Vue 實例,來獲得這兩個接口。

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

實例如下:

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

//child<template> <div>我是兒子,我收到來自父親的數據為 <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>我是兄弟組件,我收到來自兒子組件的數據信息為 <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'> 我是父組件,我收到子組件傳來的數據為 <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如何實現組件間通信

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

上述實例中的 eventBus 的使用方法是局部的 eventBus,誰要用到 eventBus 要自己手動引入。也可以將 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 應用程序開發的狀態管理模式:Vuex。Vuex 的使用比較復雜,詳細可見 Vuex 博客。Vuex 適用于大型的復雜的 Vue 項目的狀態管理。對于一些中小型的應用程序,可以根據 Vuex 的原理自定義 store 模式進行狀態管理,vue 自定義狀態管理,可詳見 Vue 簡單狀態管理—store模式 博客。

無論是 Vuex 還是 自定義 store模式 ,其實現組件間通信的原理都是通過共享數據的方式實現的。組件間使用相同的數據源,當一個組件改變數據時,另一個組件依賴的數據源也就改變了。

以上就是Vue如何實現組件間通信的詳細內容,更多關于Vue組件間通信的資料請關注好吧啦網其它相關文章!

標簽: Vue
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
久久国产日韩| 91精品国产自产观看在线| 国产精品调教| 久久国产生活片100| 欧美国产极品| 色综合五月天| 欧美日中文字幕| 中文日韩在线| 日韩国产在线观看| 国产精品毛片久久久| 国产成人精选| 亚洲v在线看| 免费中文字幕日韩欧美| 日韩免费精品| 日本亚州欧洲精品不卡| 国产精品大片免费观看| 天堂av在线| 亚洲一区二区日韩| 国产精品一区二区精品| 久草免费在线视频| 国产美女一区| 国产精品亚洲产品| 香蕉久久精品| 国产精品一区二区精品| 欧美日韩水蜜桃| 日韩国产在线观看一区| 亚洲三级欧美| 日韩精品久久久久久| 国产不卡一区| 99pao成人国产永久免费视频 | 欧美精品一二| 日韩精品1区2区3区| 91一区二区| 日韩中文字幕区一区有砖一区 | 青青青免费在线视频| 日韩中文字幕麻豆| 欧美xxxx中国| 亚洲bt欧美bt精品777| 成人综合一区| 亚洲精品大片| 成人午夜国产| 91av一区| 夜久久久久久| 高清不卡亚洲| 麻豆精品在线视频| 亚洲理论在线| 热三久草你在线| 91成人精品在线| 亚洲自拍另类| 国产传媒在线观看| 一二三区精品| 久久亚洲专区| 久久伊人国产| 青青伊人久久| 亚洲一二av| 91久久亚洲| av资源亚洲| 久久av综合| 日本综合精品一区| 蜜乳av另类精品一区二区| av免费不卡国产观看| 国产免费久久| 婷婷五月色综合香五月| 欧美日韩国产在线观看网站 | 精品91久久久久| 精品国产免费人成网站| 国产精品宾馆| 日韩一区中文| 亚洲日本免费电影| 欧美中文字幕| 尤物网精品视频| 久久精品国内一区二区三区水蜜桃| 国产精品片aa在线观看| 日韩欧乱色一区二区三区在线| 国产亚洲精品v| 亚洲伊人av| 午夜影院一区| 日本а中文在线天堂| 美日韩一区二区三区| 欧美日韩va| 天堂久久av| 亚洲精品裸体| 中文字幕日韩欧美精品高清在线| 91精品福利| 亚洲韩日在线| 免费观看久久av| 激情六月综合| 国内精品99| 婷婷亚洲五月| 日韩视频一区| 激情久久五月| 亚洲激情中文| 欧美在线网站| 在线亚洲自拍| 爽好久久久欧美精品| 久久亚洲欧美| 男人的天堂亚洲一区| 在线亚洲一区| 蜜桃视频一区二区三区在线观看| 久久高清一区| 亚洲精品动态| 国产调教精品| 久久不见久久见免费视频7 | 亚洲伊人精品酒店| 日韩视频精品在线观看| 三级欧美韩日大片在线看| 亚洲人成在线影院| 国产精品亚洲欧美日韩一区在线| 麻豆国产精品一区二区三区| 国产一区二区三区91| 婷婷激情一区| 亚洲色诱最新| 亚洲精品系列| 国产精品一区亚洲| 精品国产91| 久久久人人人| 久久国产精品久久久久久电车| 黑丝一区二区三区| 免费欧美在线视频| 日本91福利区| 麻豆精品久久久| 日本欧美不卡| 国产精品毛片在线| 日韩精品久久久久久| 精品日韩一区| 亚洲福利精品| 日韩有吗在线观看| 首页国产精品| 丝袜美腿成人在线| 欧美日韩网址| 亚洲精品福利电影| 丝袜亚洲精品中文字幕一区| 日韩精品电影一区亚洲| 久久不见久久见国语| 91精品韩国| 亚洲免费毛片| 精品国产乱码| 亚洲欧美日韩专区| 国产精品一区二区三区美女 | 日韩国产一区| 亚洲一区有码| 老司机精品视频在线播放| 秋霞影院一区二区三区| 久久香蕉精品| 福利在线免费视频| 蜜臀va亚洲va欧美va天堂| 久久狠狠亚洲综合| 成人日韩在线| 日韩福利视频网| 久久精品成人| 国产亚洲观看| 99国产精品视频免费观看一公开| 久久不卡国产精品一区二区| 欧美特黄视频| 精品网站999| 综合在线一区| 日韩精品一区二区三区免费观影| 丝袜脚交一区二区| 色网在线免费观看| 久久国产视频网| 激情婷婷综合| 国产一区精品福利| 亚洲制服一区| 色婷婷久久久| 国产精品极品| 亚洲女人av| 亚洲国产欧美日本视频| 91成人精品观看| 另类国产ts人妖高潮视频| 精品国产免费人成网站| 日韩1区2区日韩1区2区| 精品欧美激情在线观看| 国产精品66| 日韩国产在线观看| 久久亚洲电影| 美女少妇全过程你懂的久久| 久久精品国产999大香线蕉| 亚洲开心激情| 在线看片不卡| 日韩大片在线播放| 久久精品免费看| 日韩精品乱码av一区二区| 最新亚洲激情| 欧美丝袜一区| 蜜桃av在线播放| 成人在线视频免费看| 国产日韩欧美高清免费| 亚洲少妇自拍| 欧美特黄视频| 美女久久久久| 国内精品福利| а√天堂中文在线资源8| 国产精品三级| 国产亚洲一卡2卡3卡4卡新区| 免费国产自线拍一欧美视频| 精品一区免费| 亚洲国产一区二区在线观看| 99久久夜色精品国产亚洲1000部| 亚洲女同av| 人在线成免费视频|