vue元件之間通訊的8種方式

2021-10-21 03:15:46 字數 3082 閱讀 4369

對於vue來說,元件之間的訊息傳遞是非常重要的,下面是我對元件之間訊息傳遞的常用方式的總結。

1.props和$emit

父元件向子元件傳遞資料是通過prop傳遞的,子元件傳遞資料給父元件是通過$emit觸發事件來做到的.

1 vue.component('child',

6 },

7 template:`

8 9

10 `,

11 props:['message'],//設定props屬性值,得到父元件傳遞過來的資料

12 methods:

17 }

18 })

19 vue.component('parent',

30 },

31 methods:

36 }

37 })

在上面的例子中,有父元件parent和子元件child。

1).父元件傳遞了message資料給子元件,並且通過v-on繫結了乙個getchilddata事件來監聽子元件的觸發事件;

2).子元件通過props得到相關的message資料,最後通過this.$emit觸發了getchilddata事件

2.$attrs和$listeners

第一種方式處理父子元件之間的資料傳輸有乙個問題:如果父元件a下面有子元件b,元件b下面有元件c,這時如果元件a想傳遞資料給元件c怎麼辦呢? 如果採用第一種方法,我們必須讓元件a通過prop傳遞訊息給元件b,元件b在通過prop傳遞訊息給元件c;要是元件a和元件c之間有更多的元件,那採用這種方式就很複雜了。vue 2.4開始提供了$attrs和$listeners來解決這個問題,能夠讓元件a之間傳遞訊息給元件c。

1 vue.component('c',

11 }

12 })

13 vue.component('b',

18 },

19 template:`

20 21 22

23

24

25

26 `,

27 props:['message'],//得到父元件傳遞過來的資料

28 methods:

33 }

34 })

35 vue.component('a',

47 },

48 methods:,

52 //執行c子元件觸發的事件

53 getcdata(val)

56 }

57 })

3. **事件匯流排

上面兩種方式處理的都是父子元件之間的資料傳遞,而如果兩個元件不是父子關係呢?這種情況下可以使用**事件匯流排的方式。新建乙個vue事件bus物件,然後通過bus.$emit觸發事件,bus.$on監聽觸發的事件。

vue.component('brother1',

},template:`

this is brother1 compoent!

`,methods:}})

vue.component('brother2',}

`,data()

},mounted())}})

//**事件匯流排

var bus=new vue();

template:``})

4. provide和inject

在 vue.js 的2.2.0+版本中新增加了 provide 和 inject 選項。他們成對出現,用於父級元件向下傳遞資料。

父元件中通過provider來提供變數,然後在子元件中通過inject來注入變數。不論子元件有多深,只要呼叫了inject那麼就可以注入provider中的資料。而不是侷限於只能從當前父元件的prop屬性來獲取資料,只要在父元件的生命週期內,子元件都可以呼叫。

1 vue.component('child',

7 },

8 template:`

9 10 11

12 })

13 vue.component('parent',,

23 data()

27 }

28 })

5. v-model

父元件通過v-model傳遞值給子元件時,會自動傳遞乙個value的prop屬性,在子元件中通過this.$emit(『input',val)自動修改v-model繫結的值

vue.component('child',,

data()

},methods:

},template:`

})vue.component('parent',}

`,data()}})

template:``})

6. $parent和$children

在元件內部可以直接通過子元件$parent對父元件進行操作,父元件通過$children對子元件進行操作.

vue.component('child',,

data()

},methods:

},template:`

})vue.component('parent',

},data()}})

template:``})

7. vuex處理元件之間的資料互動

如果業務邏輯複雜,很多元件之間需要同時處理一些公共的資料,這個時候才有上面這一些方法可能不利於專案的維護,vuex的做法就是將這一些公共的資料抽離出來,然後其他元件就可以對這個公共資料進行讀寫操作,這樣達到了解耦的目的。

vue元件之間8種元件通訊方式總結

對於vue來說,元件之間的訊息傳遞是非常重要的,下面是我對元件之間訊息傳遞的各種方式的總結,總共有8種方式。父元件向子元件傳遞資料是通過prop傳遞的,子元件傳遞資料給父元件是通過 emit觸發事件來做到的。vue.component child template props message 得到父...

vue元件之間8種元件通訊方式總結

對於vue來說,元件之間的訊息傳遞是非常重要的,下面是我對元件之間訊息傳遞的各種方式的總結,總共有8種方式。父元件向子元件傳遞資料是通過prop傳遞的,子元件傳遞資料給父元件是通過 emit觸發事件來做到的。vue.component child template props message 得到父...

vue元件之間8種元件通訊方式總結

對於vue來說,元件之間的訊息傳遞是非常重要的,下面是我對元件之間訊息傳遞的各種方式的總結,總共有8種方式。父元件向子元件傳遞資料是通過prop傳遞的,子元件傳遞資料給父元件是通過 emit觸發事件來做到的。vue.component child template props message 得到父...