• <center id="sm46c"></center>
  • <dfn id="sm46c"></dfn>
  • <strike id="sm46c"></strike>
  • <cite id="sm46c"><source id="sm46c"></source></cite>
    • <strike id="sm46c"><source id="sm46c"></source></strike>
      <option id="sm46c"></option>
      国产精品天天看天天狠,女高中生强奷系列在线播放,久久无码免费的a毛片大全,国产日韩综合av在线,亚洲国产中文综合专区在,特殊重囗味sm在线观看无码,中文字幕一区二区三区四区在线,无码任你躁久久久久久老妇蜜桃

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

      2021-10-9    前端達人

      目錄

      一, 簡單介紹組件通信

      二, 詳解傳值方法

      1.父傳子 props

      2.子傳父 $emit

      3.跨組件通信 event-bus


      一, 簡單介紹組件通信

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

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

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

      二, 詳解傳值方法

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

      1.父傳子 props

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

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

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

              這個 text 接收到數據后的使用方法和一般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中定義 接收父組件數據的自定義屬性,叫什么都可以,我隨便起了個text
      12. text: {
      13. type: String, // type 是用來規定此屬性接收到的數據的數據類型
      14. default: "未傳遞時默認的文字" // 這個default是當這個 text 沒有接收到傳遞的數據時的默認值
      15. }
      16. }
      17. }
      18. </script>

      父組件中:        標簽內 傳遞數據

       
      
      1. <template>
      2. <div id="app">
      3. <!--
      4. 這里的text就是子組件props里定義的text,這兩個名字得一致
      5. 并且傳遞的數據也要符合 type 規定的數據類型
      6. text就是傳遞字符串,:text就是傳遞動態數據
      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 定義的屬性名,并且傳遞參數具體對應關系和效果如下:

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

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

       

      2.子傳父 $emit

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

      子組件:        發起一個自定義事件,等待父組件監聽到執行函數

       
      
      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中定義 接收父組件數據的自定義屬性,叫什么都可以,我隨便起了個text
      13. text: {
      14. type: String, // type 是用來規定此屬性接收到的數據的數據類型
      15. default: "未傳遞時默認的文字" // 這個default是當這個 text 沒有接收到傳遞的數據時的默認值
      16. }
      17. },
      18. methods: {
      19. // 按鈕點擊事件
      20. changeTextFn () {
      21. // 發起自定義事件,名字叫什么都行,第一個參數是事件名,之后再跟著的都是傳遞的參數
      22. this.$emit('changeFn', '我想變成三娃')
      23. }
      24. }
      25. }
      26. </script>

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

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

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

       

      父組件:        行內監聽子組件的 自定義事件名(函數上不用寫參數,在 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. // 監聽子組件自定義事件
      19. changeFn (newText) {
      20. // 這里的形參接受到的就是子組件中 第二個參數傳遞的數值
      21. this.wenzi = newText
      22. }
      23. }
      24. }
      25. </script>

      對應關系和效果圖如下:

       

       

       

      3.跨組件通信 event-bus

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

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

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

      發送數據 男組件:   

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

       
      
      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 事件總線發起 自定義事件,并且傳遞參數(第一個是事件名,第二個開始是參數)
      17. this.bus.$emit('sendMessage', this.gift)
      18. }
      19. }
      20. }
      21. </script>

      接收數據 女組件:         

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

       
      
      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 這個事件所傳遞的數據
      16. this.bus.$on("sendMessage", (e) => {
      17. this.info = e;
      18. });
      19. }
      20. }
      21. </script>
      22. <style>
      23. </style>

      具體效果如下:

       

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

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

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

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

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

      日歷

      鏈接

      個人資料

      藍藍設計的小編 http://www.li-bodun.cn

      存檔

      主站蜘蛛池模板: 中文字幕亚洲综合久久| 51午夜精品免费视频| 国产精品白嫩极品在线看| 中文字幕在线观看| 国偷自产一区二区三区在线视频| 欧美人与动牲交a免费| 国产精品真实对白精彩久久| 亚洲www啪成人一区二区麻豆| 狠狠久久精品中文字幕无码| 国产精品一区二区无码免费看片| 波多野结衣国产精品| 天堂va在线高清一区| 国产成人av片在线观看| aⅴ一区二区三区无卡无码| 国产不卡久久精品影院| 四虎女优在线视频免费看| 日韩五十路| 亚洲国产精品久久久久4婷婷| 亚洲色自偷自拍另类小说| 欧美xxxx新一区二区三区| 91亚洲精品国产自在现线| 国产免费AV片在线看| 狠狠躁天天躁夜夜躁婷婷| 国产精品一区在线蜜臀| 亚洲aⅴ无码专区在线观看| 好爽毛片一区二区三区四| 日韩精品亚洲人旧成在线| 午夜福利片1000无码免费| 榆社县| 国产成人精品免费视频大全五级| 午夜福利国产盗摄久久性| 亚洲综合精品第一页| 蜜臀av999无码精品国产专区| 国语自产精品视频在线30| 免费现黄频在线观看国产| 欧美,日韩aⅴ| 无码专区—va亚洲v天堂| 亚洲av二区三区在线| 亚洲人成在线免费观看| 精品av国产一区二区三区| 欧美福利在线|