新聞中心
寫在前面
我們會(huì)講以下七種組件通信方式:

成都網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)建站!專注于網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)公司、微信開發(fā)、微信小程序、集團(tuán)企業(yè)網(wǎng)站設(shè)計(jì)等服務(wù)項(xiàng)目。核心團(tuán)隊(duì)均擁有互聯(lián)網(wǎng)行業(yè)多年經(jīng)驗(yàn),服務(wù)眾多知名企業(yè)客戶;涵蓋的客戶類型包括:食品包裝袋等眾多領(lǐng)域,積累了大量豐富的經(jīng)驗(yàn),同時(shí)也獲得了客戶的一致贊譽(yù)!
- props
- emit
- v-model
- refs
- provide/inject
- eventBus
- vuex/pinia
舉個(gè)例子
本文將使用如下演示,如下圖所示:
上圖中,列表和輸入框分別是父組件和子組件。根據(jù)不同的通信方式,會(huì)調(diào)整父子組件。
1、Props
props 是 Vue 中最常見(jiàn)的父子通信方式,使用起來(lái)也比較簡(jiǎn)單。
根據(jù)上面的demo,我們?cè)诟附M件中定義了數(shù)據(jù)和對(duì)數(shù)據(jù)的操作,子組件只渲染一個(gè)列表。
父組件代碼如下:
v-model="value"
type="text"
class="form-control"
placeholder="Please enter"
/>
子組件只需要渲染父組件傳遞的值。
代碼如下:
- {{ i }}
2、Emit
Emit也是Vue中最常見(jiàn)的組件通信方式,用于子組件向父組件傳遞消息。
我們?cè)诟附M件中定義列表,子組件只需要傳遞添加的值。
子組件代碼如下:
v-model="value"
type="text"
class="form-control"
placeholder="Please enter"
/>
點(diǎn)擊子組件中的【添加】按鈕后,我們會(huì)發(fā)出一個(gè)自定義事件,并將添加的值作為參數(shù)傳遞給父組件。
父組件代碼如下:
- {{ i }}
在父組件中,只需要監(jiān)聽(tīng)子組件的自定義事件,然后執(zhí)行相應(yīng)的添加邏輯即可。
3、v-model
v-model 是 Vue 中一個(gè)優(yōu)秀的語(yǔ)法糖,比如下面的代碼。
這是以下代碼的簡(jiǎn)寫形式
這確實(shí)容易了很多?,F(xiàn)在我們將使用 v-model 來(lái)實(shí)現(xiàn)上面的示例。
子組件
v-model="value"
type="text"
class="form-control"
placeholder="Please enter"
/>
在子組件中,我們先定義props和emits,添加完成后再發(fā)出指定的事件。
注意:update:*是Vue中固定的寫法,*代表props中的一個(gè)屬性名。
在父組件中使用比較簡(jiǎn)單,代碼如下:
- {{ i }}
4、Refs
使用API選項(xiàng)時(shí),我們可以通過(guò)this.$refs.name獲取指定的元素或組件,但在組合API中不行。如果我們想通過(guò)ref獲取,需要定義一個(gè)同名的Ref對(duì)象,在組件掛載后可以訪問(wèn)。
示例代碼如下:
{{ i }}
子組件代碼如下:
v-model="value"
type="text"
class="form-control"
placeholder="Please enter"
/>
注意:默認(rèn)情況下,setup 組件是關(guān)閉的,通過(guò)模板 ref 獲取組件的公共實(shí)例。如果需要公開,需要通過(guò)defineExpose API 公開。
5、provide/inject
provide/inject是 Vue 中提供的一對(duì) API。無(wú)論層級(jí)多深,API 都可以實(shí)現(xiàn)父組件到子組件的數(shù)據(jù)傳遞。
示例代碼如下所示:
父組件
v-model="value"
type="text"
class="form-control"
placeholder="Please enter"
/>
子組件
- {{ i }}
注意:使用 provide 進(jìn)行數(shù)據(jù)傳輸時(shí),盡量使用 readonly 封裝數(shù)據(jù),避免子組件修改父組件傳遞的數(shù)據(jù)。
6、eventBus
Vue 3 中移除了 eventBus,但可以借助第三方工具來(lái)完成。Vue 官方推薦使用 mitt 或 tiny-emitter。
在大多數(shù)情況下,不建議使用全局事件總線來(lái)實(shí)現(xiàn)組件通信。雖然比較簡(jiǎn)單粗暴,但是維護(hù)事件總線從長(zhǎng)遠(yuǎn)來(lái)看是個(gè)大問(wèn)題,這里就不解釋了。有關(guān)詳細(xì)信息,您可以閱讀特定工具的文檔。
7、vuex/pinia
Vuex 和 Pinia 是 Vue 3 中的狀態(tài)管理工具,使用這兩個(gè)工具可以輕松實(shí)現(xiàn)組件通信。由于這兩個(gè)工具都比較強(qiáng)大,這里就不一一展示了。有關(guān)詳細(xì)信息,請(qǐng)參閱文檔。
文章名稱:七個(gè)Vue3中的組件通信方式
網(wǎng)站網(wǎng)址:http://www.fisionsoft.com.cn/article/codghcs.html


咨詢
建站咨詢
