<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        怎樣操作vue中$emit與$on父子與兄弟組件通信

        來源:懂視網 責編:小采 時間:2020-11-27 19:44:00
        文檔

        怎樣操作vue中$emit與$on父子與兄弟組件通信

        怎樣操作vue中$emit與$on父子與兄弟組件通信:這次給大家帶來怎樣操作vue中$emit 與$on父子與兄弟組件通信,操作vue中$emit 與$on父子與兄弟組件通信的注意事項有哪些,下面就是實戰案例,一起來看一下。主要的傳輸方式有三種:1.父組件到子組件通信2.子組件到父組件的通信3.兄弟組件之間的通信一、父組
        推薦度:
        導讀怎樣操作vue中$emit與$on父子與兄弟組件通信:這次給大家帶來怎樣操作vue中$emit 與$on父子與兄弟組件通信,操作vue中$emit 與$on父子與兄弟組件通信的注意事項有哪些,下面就是實戰案例,一起來看一下。主要的傳輸方式有三種:1.父組件到子組件通信2.子組件到父組件的通信3.兄弟組件之間的通信一、父組

        這次給大家帶來怎樣操作vue中$emit 與$on父子與兄弟組件通信,操作vue中$emit 與$on父子與兄弟組件通信的注意事項有哪些,下面就是實戰案例,一起來看一下。

        主要的傳輸方式有三種:

        1.父組件到子組件通信

        2.子組件到父組件的通信

        3.兄弟組件之間的通信

        一、父組件傳值給子組件

        父組件給子組件傳子,使用props

        //父組件:parent.vue
        <template>
         <p>
         <child :vals = "msg"></child>
         </p>
        </template>
        <script>
        import child from "./child";
        export default {
         data(){
         return {
         msg:"我是父組件的數據,將傳給子組件"
         }
         },
         components:{
         child
         }
        }
        </script>
        //子組件:child.vue
        <template>
         <p>
         {{vals}}
         </p>
        </template>
        <script>
        export default {
         props:{ //父組件傳值 可以是一個數組,對象
         vals:{
         type:String,//類型為字符竄
         default:"123" //可以設置默認值
         }
         },
        }
        </script>

        2.子組件到父組件的通信

        使用 $emit(eventname,option) 觸發事件,

        參數一:自定義事件名稱,寫法,小寫或者用-連接,如event,event-name 不能寫駝峰寫法(eventName)

        子組件給父組件傳值,可以在子組件中使用$emit觸發事件的值傳出去,父組件通過事件監聽,獲取數據

        但是,這里有一個問題,

        1、究竟是由子組件內部主動傳數據給父組件,由父組件監聽接收(由子組件中操作決定什么時候傳值)

        2、還是通過父組件決定子組件什么時候傳值給父組件,然后再監聽接收 (由父組件中操作決定什么時候傳值)

        兩種情況都有

        2.1 : $meit事件觸發,通過子組件內部的事件觸發自定義事件$emit

        2.2 : $meit事件觸發, 可以通過父組件操作子組件 (ref)的事件來觸發 自定義事件$emit

        第一種情況:

        //父組件:parent.vue
        <template>
         <p>
         <child v-on:childevent='wathChildEvent'></child>
         <p>子組件的數據為:{{msg}}</p>
         </p>
        </template>
        <script>
        import child from "./child";
        export default {
         data(){
         return{
         msg:""
         }
         },
         components:{
         child
         },
         methods:{
         wathChildEvent:function(vals){//直接監聽 又子組件觸發的事件,參數為子組件的傳來的數據
         console.log(vals);//結果:這是子組件的數據,將有子組件操作觸發傳給父組件
         this.msg = vlas;
         } 
         }
        }
        </script>
        //子組件:child.vue
        <template>
         <p>
         <input type="button" value="子組件觸發" @click="target">
         </p>
        </template>
        <script>
        export default {
         data(){
         return {
         texts:'這是子組件的數據,將有子組件操作觸發傳給父組件'
         }
         },
         methods:{
         target:function(){ //有子組件的事件觸發 自定義事件childevent
         this.$emit('childevent',this.texts);//觸發一個在子組件中聲明的事件 childEvnet
         }
         },
        }
        </script>

        第二種情況:

        //父組件:parent.vue
        <template>
         <p>
         <child v-on:childevent='wathChildEvent' ref="childcomp"></child>
         <input type="button" @click="parentEnvet" value="父組件觸發" />
         <p>子組件的數據為:{{msg}}</p>
         </p>
        </template>
        <script>
        import child from "./child";
        export default {
         data(){
         return{
         msg:""
         }
         },
         components:{
         child
         },
         methods:{
         wathChildEvent:function(vals){//直接監聽 又子組件觸發的事件,參數為子組件的傳來的數據
         console.log(vals);//這是子組件的數據,將有子組件操作觸發傳給父組件
         this.msg = vlas;
         },
         parentEnvet:function(){
         this.$refs['childcomp'].target(); //通過refs屬性獲取子組件實例,又父組件操作子組件的方法觸發事件$meit
         }
         }
        }
        </script>
        //子組件:child.vue
        <template>
         <p>
         <!-- dothing..... -->
         </p>
        </template>
        <script>
        export default {
         data(){
         return {
         texts:'這是子組件的數據,將有子組件操作觸發傳給父組件'
         }
         },
         methods:{
         target:function(){ //又子組件的事件觸發 自定義事件childevent
         this.$emit('childevent',this.texts);//觸發一個在子組件中聲明的事件 childEvnet
         }
         },
        }
        </script>

        將兩者情況對比,區別就在于$emit 自定義事件的觸發是有父組件還是子組件去觸發

        第一種,是在子組件中定義一個click點擊事件來觸發自定義事件$emit,然后在父組件監聽

        第二種,是在父組件中第一一個click點擊事件,在組件中通過refs獲取實例方法來直接觸發事件,然后在父組件中監聽

        3.兄弟組件之間的通信

        (1)、兄弟之間傳遞數據通過事件

        (2)、創建一個新Vue的實例,讓各個兄弟共用同一個事件機制。(關鍵點)

        (3)、傳遞數據方,通過事件觸發$emit(方法名,傳遞的數據)。

        (4)、接收數據方,在mounted()鉤子函數(掛載實例)中 觸發事件$on(方法名,callback(接收數據的數據)),此時callback函數中的this已經發生了改變,可以使用箭頭函數。

        //建立一個空的Vue實例,將通信事件掛載在該實例上
        //emptyVue.js
        import Vue from 'vue'
        export default new Vue()
        //兄弟組件a:childa.vue
        <template>
         <p>
         <span>A組件->{{msg}}</span>
         <input type="button" value="把a組件數據傳給b" @click ="send">
         </p>
        </template>
        <script>
        import vmson from "./emptyVue"
        export default {
         data(){
         return {
         msg:"我是a組件的數據"
         }
         },
         methods:{
         send:function(){
         vmson.$emit("aevent",this.msg)
         }
         }
        }
        </script>
        //兄弟組件b:childb.vue
        <template>
         <p>
         <span>b組件,a傳的的數據為->{{msg}}</span>
         </p>
        </template>
        <script>
        import vmson from "./emptyVue"
        export default {
         data(){
         return {
         msg:""
         }
         },
         mounted(){
         vmson.$on("aevent",(val)=>{//監聽事件aevent,回調函數要使用箭頭函數;
         console.log(val);//打印結果:我是a組件的數據
         this.msg = val;
         })
         }
        }
        </script>
        //父組件:parent.vue
        <template>
         <p>
         <childa><childa>
         <childb></childb>
         </p>
        </template>
        <script>
        import childa from "./childa";
        import childb from "./childb";
        export default {
         data(){
         return{
         msg:""
         }
         },
         components:{
         childa,
         childb
         },
        }
        </script>

        到此,vue中的組件通信傳值基本可以搞定了,但是對于大型復雜的項目,建議采用vuex 狀態管理更適合....

        相信看了本文案例你已經掌握了方法,更多精彩請關注Gxl網其它相關文章!

        推薦閱讀:

        怎樣優化js async函數

        如何操作angular6中使用less

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        怎樣操作vue中$emit與$on父子與兄弟組件通信

        怎樣操作vue中$emit與$on父子與兄弟組件通信:這次給大家帶來怎樣操作vue中$emit 與$on父子與兄弟組件通信,操作vue中$emit 與$on父子與兄弟組件通信的注意事項有哪些,下面就是實戰案例,一起來看一下。主要的傳輸方式有三種:1.父組件到子組件通信2.子組件到父組件的通信3.兄弟組件之間的通信一、父組
        推薦度:
        標簽: VUE 通信 組件
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 亚洲资源在线视频| 亚洲日本va午夜中文字幕久久| 最新精品亚洲成a人在线观看| 亚洲AV永久无码精品网站在线观看| 精品免费人成视频app| 亚洲AV无码专区电影在线观看| 国产精品视频全国免费观看| 中文字幕亚洲日本岛国片| 日韩精品内射视频免费观看 | 精品国产综合成人亚洲区| 国产亚洲人成网站在线观看| 免费VA在线观看无码| 亚洲国产电影av在线网址| 一个人看的www免费在线视频| 亚洲人AV永久一区二区三区久久| 成人午夜免费视频| 在线看片v免费观看视频777| 亚洲人成电影青青在线播放| 免费无码精品黄AV电影| 麻豆亚洲AV成人无码久久精品| 久久久精品2019免费观看| 亚洲国产av一区二区三区| 色哟哟国产精品免费观看| 亚洲综合伊人久久综合| 成人免费区一区二区三区 | 国产精品亚洲A∨天堂不卡| 成全视频免费观看在线看| 久久亚洲AV无码精品色午夜| 精品久久久久国产免费| 国产精品亚洲精品日韩动图| 日本在线高清免费爱做网站| 亚洲国产精品日韩av不卡在线| 免费h黄肉动漫在线观看| 免费无码又爽又刺激网站| 亚洲精品在线电影| 成人片黄网站色大片免费观看APP| 亚洲精品自拍视频| 亚洲AV无码不卡在线观看下载| 日韩免费观看一区| 亚洲熟妇丰满xxxxx| 亚洲日韩中文字幕在线播放|