国产黄色免费网站_久久天天做天天爱综合色_精品国产一区久久久_成人黄色激情网站_久久成人在线视频_美女一区二区在线观看_亚洲精品免费一区亚洲精品免费精品一区 _91精品国产综合久久精品麻豆

Vue 組件通信(父傳子,子傳父,跨組件傳值)

2021-10-9    前端達人

目錄

一, 簡單介紹組件通信

二, 詳解傳值方法

1.父傳子 props

2.子傳父 $emit

3.跨組件通信 event-bus


一, 簡單介紹組件通信

        我們知道在現(xiàn)在的開發(fā)環(huán)境下,不管前后端開發(fā)都是組件化模塊化,這是因為組件的優(yōu)勢無比的巨大,可以進行多次的復用增加開發(fā)效率,也可以分類鮮明,便于維護,而我今天所寫的就是開發(fā)中分割成不同的組件互相傳遞數(shù)據(jù)和互動

        我的工作中常用地組件通信大致分為三類: 父傳子 , 子傳父 , 跨組件傳值

        下面就來分別介紹一下 我常用的這三種傳值方法

二, 詳解傳值方法

        父子組件的確認方法:我將 B 組件import引入到 A 組件中,那么 B 就是 A 的子組件,A 就是 B 的父組件

1.父傳子 props

        簡而言之,父傳子就是父組件把數(shù)據(jù)傳給子組件,具體就是如下,在子組件的props中定義自定義屬性來待接收父組件的數(shù)據(jù),有兩種方法 如下:

        第一種,也是最推薦用的一種,以復雜類型的方式進行聲明,這樣存儲的便是一個地址,可以和父組件的數(shù)據(jù)進行雙向綁定,同步數(shù)據(jù),雖然可以雙向綁定,但是在Vue2.0中還是不可以直接在子組件中更改父組件的數(shù)據(jù),需要用到子傳父才行,這點等下會寫到

        這里只是用 text 舉個栗子,具體叫什么都可以哈,只是父子里面需要對應上相同

        這個 text 接收到數(shù)據(jù)后的使用方法和一般data中聲明的變量一樣,只是不能再子組件中改變他

子組件中:        props 定義屬性接收

 
  1. <template>
  2. <div>
  3. <h2>son組件</h2>
  4. <p>props:{{ text }}</p>
  5. </div>
  6. </template>
  7. <script>
  8. export default {
  9. // 在此處定義props
  10. props: {
  11. // props中定義 接收父組件數(shù)據(jù)的自定義屬性,叫什么都可以,我隨便起了個text
  12. text: {
  13. type: String, // type 是用來規(guī)定此屬性接收到的數(shù)據(jù)的數(shù)據(jù)類型
  14. default: "未傳遞時默認的文字" // 這個default是當這個 text 沒有接收到傳遞的數(shù)據(jù)時的默認值
  15. }
  16. }
  17. }
  18. </script>

父組件中:        標簽內 傳遞數(shù)據(jù)

 
  1. <template>
  2. <div id="app">
  3. <!--
  4. 這里的text就是子組件props里定義的text,這兩個名字得一致
  5. 并且傳遞的數(shù)據(jù)也要符合 type 規(guī)定的數(shù)據(jù)類型
  6. text就是傳遞字符串,:text就是傳遞動態(tài)數(shù)據(jù)
  7. -->
  8. <Son text="我是大娃 傳給子啦" />
  9. <Son :text="wenzi" />
  10. </div>
  11. </template>
  12. <script>
  13. import Son from './components/son.vue';
  14. export default {
  15. data () {
  16. return {
  17. wenzi: '我是二娃 傳給子啦'
  18. }
  19. },
  20. components: {
  21. Son
  22. }
  23. }
  24. </script>

        如上 雖然我的注釋寫的很清楚了,但是還是在介紹一下, <Son/> 是子組件的標簽,在此標簽的基礎上書寫 子組件props 定義的屬性名,并且傳遞參數(shù)具體對應關系和效果如下:

        如上就是第一種我最常用的父傳子,其實還有一種方法,但是我一般也不用,很不方便,也貼到下邊了,這個是以數(shù)組方式聲明

 
  1. export default {
  2. // 在此處定義props
  3. props: ['text']
  4. }
  5. </script>

 

2.子傳父 $emit

        剛剛說到了在 Vue2.0 子組件不能直接改父組件的數(shù)據(jù),否則會報錯,這個解決方法就是在子組件中發(fā)起一個 自定義事件 ,在父組件監(jiān)聽這個事件,并且定義一個函數(shù)來改變數(shù)據(jù),具體操作如下:

子組件:        發(fā)起一個自定義事件,等待父組件監(jiān)聽到執(zhí)行函數(shù)

 
  1. <template>
  2. <div>
  3. <h2>son組件</h2>
  4. <p>props:{{ text }}</p>
  5. <button @click="changeTextFn">改變文字</button>
  6. </div>
  7. </template>
  8. <script>
  9. export default {
  10. // 在此處定義props
  11. props: {
  12. // props中定義 接收父組件數(shù)據(jù)的自定義屬性,叫什么都可以,我隨便起了個text
  13. text: {
  14. type: String, // type 是用來規(guī)定此屬性接收到的數(shù)據(jù)的數(shù)據(jù)類型
  15. default: "未傳遞時默認的文字" // 這個default是當這個 text 沒有接收到傳遞的數(shù)據(jù)時的默認值
  16. }
  17. },
  18. methods: {
  19. // 按鈕點擊事件
  20. changeTextFn () {
  21. // 發(fā)起自定義事件,名字叫什么都行,第一個參數(shù)是事件名,之后再跟著的都是傳遞的參數(shù)
  22. this.$emit('changeFn', '我想變成三娃')
  23. }
  24. }
  25. }
  26. </script>

        我先在原有的代碼上添加了一個<button>按鈕,在點擊調用的函數(shù)中,通過 $emit 來發(fā)起事件并且可以傳遞參數(shù)

格式:        this.$emit('changeFn', '我想變成三娃') 

格式:        this.$emit('自定義事件名', 傳遞的參數(shù)) 

 

父組件:        行內監(jiān)聽子組件的 自定義事件名(函數(shù)上不用寫參數(shù),在 methods 中直接寫形參就行)

 
  1. <template>
  2. <div id="app">
  3. <Son :text="wenzi" @changeFn="changeFn" />
  4. </div>
  5. </template>
  6. <script>
  7. import Son from './components/son.vue';
  8. export default {
  9. data () {
  10. return {
  11. wenzi: '我是二娃 傳給子啦'
  12. }
  13. },
  14. components: {
  15. Son
  16. },
  17. methods: {
  18. // 監(jiān)聽子組件自定義事件
  19. changeFn (newText) {
  20. // 這里的形參接受到的就是子組件中 第二個參數(shù)傳遞的數(shù)值
  21. this.wenzi = newText
  22. }
  23. }
  24. }
  25. </script>

對應關系和效果圖如下:

 

 

 

3.跨組件通信 event-bus

        如果兩個組件的關系非常的復雜或者沒有未產生直接聯(lián)系,那么通過父子組件通訊是非常麻煩的。這時候可以使用通用的組件通訊方案:事件總線(event-bus)

        按照我的習慣,我會將事件總線創(chuàng)建到 main.js 中,這個使用原理是將bus掛載到Vue原型上,這樣就可以保證所有的組件都能通過 this.bus 訪問到事件總線,從而通過同一個事件總線監(jiān)聽同一個事件,具體原理和父子傳參差不多,都是 $emit 傳遞數(shù)據(jù), 只不過接收變成了$on 

        我這次以送禮物舉例用了兩個關系不大的組件 分別是 男組件 和 女組件 (隨便起的名)具體如下圖:

發(fā)送數(shù)據(jù) 男組件:   

    this.bus.$emit('自定義事件名',傳遞的參數(shù)) 

 
  1. <template>
  2. <div>
  3. <h1>男組件</h1>
  4. <button @click="sendGiftFn">送禮物</button>
  5. </div>
  6. </template>
  7. <script>
  8. export default {
  9. data () {
  10. return {
  11. gift: '玫瑰花'
  12. }
  13. },
  14. methods: {
  15. sendGiftFn () {
  16. // 通過 bus 事件總線發(fā)起 自定義事件,并且傳遞參數(shù)(第一個是事件名,第二個開始是參數(shù))
  17. this.bus.$emit('sendMessage', this.gift)
  18. }
  19. }
  20. }
  21. </script>

接收數(shù)據(jù) 女組件:         

 this.bus.$on('監(jiān)聽的事件名',(e)=>{ e這個形參所接收的就是監(jiān)聽事件所攜帶的參數(shù)數(shù)據(jù) }) 

 
  1. <template>
  2. <div>
  3. <h1>女組件</h1>
  4. <p>來自男組件的禮物:{{ info }}</p>
  5. </div>
  6. </template>
  7. <script>
  8. export default {
  9. data () {
  10. return {
  11. info: ""
  12. }
  13. },
  14. created () {
  15. // e 就是 sendMessage 這個事件所傳遞的數(shù)據(jù)
  16. this.bus.$on("sendMessage", (e) => {
  17. this.info = e;
  18. });
  19. }
  20. }
  21. </script>
  22. <style>
  23. </style>

具體效果如下:

 

綜上所述,就是我在工作中總結出來的一些組建通信的方法,希望您看到這里會有所收獲

藍藍設計建立了UI設計分享群,每天會分享國內外的一些優(yōu)秀設計,如果有興趣的話,可以進入一起成長學習,請掃碼藍小助,報下信息,藍小助會請您入群。歡迎您加入噢~~希望得到建議咨詢、商務合作,也請與我們聯(lián)系。

分享此文一切功德,皆悉回向給文章原作者及眾讀者.

轉自:csdn
免責聲明:藍藍設計尊重原作者,文章的版權歸原作者。如涉及版權問題,請及時與我們取得聯(lián)系,我們立即更正或刪除。

藍藍設計www.newchinaweekly.com )是一家專注而深入的界面設計公司,為期望卓越的國內外企業(yè)提供卓越的UI界面設計、BS界面設計 、 cs界面設計 、 ipad界面設計 、 包裝設計 、 圖標定制 、 用戶體驗 、交互設計、 網站建設 平面設計服務

日歷

鏈接

個人資料

藍藍設計的小編 http://www.newchinaweekly.com

存檔

日韩成人av在线资源| 亚洲欧美日本日韩| 成人黄页网站视频| 亚洲成人高清| 黄色的视频在线观看| 免费v片在线观看| 911亚洲精品| 日韩国产大片| 激情综合网站| 第四色中文综合网| 国内综合精品午夜久久资源| 欧美艳星介绍134位艳星| 国产情侣一区在线| 999久久久91| 国产美女久久久久| 久久精品国产精品青草| 国产欧美日韩久久| 欧美日韩aaaaa| 黑人欧美xxxx| 亚洲欧洲日本专区| 91精品在线观看视频| 日本高清不卡的在线| 久久国产一区二区| 亚洲另类第一页| 免费中文字幕日韩| 欧美日韩在线国产| 刘亦菲毛片一区二区三区| www.老鸭窝.com| 黄色无遮挡网站| 好久没做在线观看| 日韩欧美网址| 久久久精品2019中文字幕之3| 欧美在线观看禁18| 国产精品久久久爽爽爽麻豆色哟哟| 成人免费看视频| 国产精品18久久久久久久久久久久 | 精品久久一区二区| 青草热久免费精品视频 | 欧美日韩成人在线播放| 中文字幕精品久久| 成人性色av| 欧美视频观看一区| 成年人性生活视频| 无码人妻黑人中文字幕| 国产情侣激情自拍| 成人拍拍拍免费视频网站| wwwww亚洲| 激情自拍一区| 夜夜揉揉日日人人青青一国产精品| 亚洲国产日韩精品| www.亚洲一区| 亚洲视频导航| 欧美日韩国产黄色| 亚洲国产精品久久久久婷婷软件| 国产在线网站| av2020不卡| 日韩成人综合网| 奇米影视7777精品一区二区| 91福利在线免费观看| 国产精品日韩在线播放| 免费日韩电影在线观看| 黄色av网址在线观看| 午夜成人免费影院| 1769免费视频在线观看| 欧美日韩五区| 精品久久成人| 亚洲欧洲精品一区二区三区| 久久国产精品电影| 成人福利视频网| 日韩久久不卡| 欧美日韩国产黄色| 老太做爰xxxx| aiai在线| 自拍偷拍亚洲| 日韩欧美伦理| 亚洲男同性恋视频| 97在线观看视频国产| 国产99在线免费| 五十路六十路七十路熟婆 | 日韩欧美一区中文| 欧美精品一本久久男人的天堂| 国产人妻互换一区二区| 精品欧美一区二区三区免费观看| 午夜成人免费影院| 8x8ⅹ拨牐拨牐拨牐在线观看| 久久不射2019中文字幕| 欧美成人综合网站| 中文字幕制服丝袜在线| 亚洲少妇中文字幕| 国产无遮挡又黄又爽又色视频| 欧美风狂大伦交xxxx| xxxxx.日韩| 91亚洲男人天堂| 欧美二区在线观看| 日本成人精品在线| 国产艳妇疯狂做爰视频| 国产又黄又爽又猛免费app| 日韩黄色碟片| 中文字幕一区三区| 国产欧美一区二区三区视频| 国产一区二区三区精品在线| 国产激情三区| 欧美国产专区| 欧美大片在线观看| 无码 制服 丝袜 国产 另类| www.97av.com| 日本中文视频| 久久精品一区二区不卡| 欧美撒尿777hd撒尿| 亚洲精品自在在线观看| 一级黄色录像大片| 超级白嫩亚洲国产第一| 久久久久久久久久久久久夜| 国产va免费精品高清在线观看| 欧美大片免费播放| 午夜精品久久久久久久96蜜桃 | 日本成址在线观看| 欧美办公室脚交xxxx| 不卡av电影在线播放| 亚洲第一级黄色片| 欧美日韩福利在线| 乱人伦中文字幕在线zone| www在线免费观看| 欧美激情另类| 欧美成人精品高清在线播放| 黄色三级中文字幕| 日韩视频www| 少妇在线看www| 国产三级精品三级在线专区| 色婷婷综合久久久久| 午夜影院免费观看视频| 四虎最新网站| 久久久久久亚洲精品杨幂换脸| 国产丝袜一区二区三区免费视频| 涩涩网站在线看| 天堂中文网在线| 1stkiss在线漫画| 国产欧美一区二区精品性色 | 日韩xxx高潮hd| 成人影院在线观看视频| 亚洲激情一区| 超碰91人人草人人干| 国产福利在线导航| 日韩经典av| 一区二区三区美女| 一区二区三区四区免费视频| 性感美女视频一二三| 国产伦精品一区二区三区千人斩 | 给我免费播放片在线观看| 国产精品理人伦一区二区三区| 亚洲精品在线观看91| 久久久精品欧美| 免费在线观看a级片| 爱啪视频在线观看视频免费| 亚洲成人在线网站| 欧美在线观看成人| 九七影院理伦片| 高清国产午夜精品久久久久久| 成人精品水蜜桃| 亚洲人的天堂男人爽爽爽| 波多野结衣在线观看一区二区| 最近免费中文字幕视频2019| 天天鲁一鲁摸一摸爽一爽| 蜜桃视频动漫在线播放| 在线观看日韩国产| 久久久久久久少妇| 三上悠亚在线观看| 国产无遮挡一区二区三区毛片日本| 欧美精品欧美精品| 久久精品国产麻豆| 青娱乐精品视频| 国产午夜精品一区| 精品入口蜜桃| 日欧美一区二区| 国产精品初高中精品久久| 日本18中文字幕| 亚洲主播在线| 国产精品一区二区三区免费观看| 国产精品免费人成网站酒店| 91视频欧美| 91精品久久久久久蜜臀| 亚洲av无码国产精品麻豆天美| 美日韩黄色片| 久久毛片高清国产| 青草网在线观看| 中文字幕在线中文字幕二区| 国产精品少妇自拍| 青青在线视频免费| 色噜噜在线网| 综合视频在线| 国产精品久久久久久久久久久久 | 国产午夜精品美女毛片视频| 国产欧美日韩小视频| 中文字幕不卡| 性做久久久久久久免费看| 日韩精品一线二线三线| eeuss影院第1页在线| 国产精品丝袜久久久久久app| 婷婷丁香激情网| 男女羞羞视频教学|