新聞中心
寫在前面
本文采用的寫法,比options API更自由。那么我們就來說說以下七種組件通信方式:

成都創(chuàng)新互聯(lián)公司專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站、溫州網(wǎng)絡(luò)推廣、小程序開發(fā)、溫州網(wǎng)絡(luò)營(yíng)銷、溫州企業(yè)策劃、溫州品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營(yíng)等,從售前售中售后,我們都將竭誠(chéng)為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);成都創(chuàng)新互聯(lián)公司為所有大學(xué)生創(chuàng)業(yè)者提供溫州建站搭建服務(wù),24小時(shí)服務(wù)熱線:028-86922220,官方網(wǎng)址:www.cdcxhl.com
- props
- emit
- v-model
- refs
- provide/inject
- eventBus
- vuex/pinia
舉個(gè)例子
本文將使用下面的演示,如下圖所示:
上圖中,列表和輸入框分別是父組件和子組件。根據(jù)不同的通信方式,父子組件會(huì)有所調(diào)整。
1. Props
Props是Vue中最常見的父子通信方式,使用起來也比較簡(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中最常見的組件通信方式,用于子組件向父組件傳遞消息。
我們?cè)诟附M件中定義列表,子組件只需要傳遞添加的值即可。
子組件代碼如下:
v-model="value"
type="text"
class="form-control"
placeholder="Please enter"
/>
單擊子組件中的 [Add] 按鈕后,我們發(fā)出自定義事件并將添加的值作為參數(shù)傳遞給父組件。
父組件代碼如下:
- {{ i }}
在父組件中,只需要監(jiān)聽子組件的自定義事件,然后執(zhí)行相應(yīng)的添加邏輯即可。
3.v-model
v-model是Vue中一個(gè)優(yōu)秀的語法糖,比如下面的代碼。
這是以下代碼的簡(jiǎn)寫形式
確實(shí)容易多了?,F(xiàn)在我們將使用 v-model 來實(shí)現(xiàn)上面的例子。
子組件
v-model="value"
type="text"
class="form-control"
placeholder="Please enter"
/>
在子組件中,我們先定義props和emit,添加完成后,再emit指定的事件。
注意:update:*是Vue中固定的寫法,*代表props中的一個(gè)屬性名。
在父組件中使用比較簡(jiǎn)單,代碼如下:
- {{ i }}
4. refs
在使用option API時(shí),我們可以通過this.$refs.name獲取指定的元素或組件,而在combined API中則不行。如果我們想通過ref獲取,需要定義一個(gè)同名的Ref對(duì)象,組件掛載后才能訪問到。
示例代碼如下:
{{ i }}
子組件代碼如下:
v-model="value"
type="text"
class="form-control"
placeholder="Please enter"
/>
注意:默認(rèn)情況下,setup組件是關(guān)閉的,通過template ref獲取組件的public實(shí)例。如果需要暴露,需要通過defineExpose API暴露。
5. provide/inject
Provide 和 inject 是 Vue 中提供的一對(duì) API。無論層次有多深,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,但可以借助第三方工具來完成。Vue 官方推薦 mitt 或 tiny-emitter。大多數(shù)情況下,不推薦使用全局事件總線來實(shí)現(xiàn)組件通信。雖然比較簡(jiǎn)單粗暴,但是長(zhǎng)期維護(hù)event bus是個(gè)大問題,這里就不多說了。具體可以閱讀具體工具的文檔。
7.Vuex && Pinia
Vuex和Pinia是Vue 3中的狀態(tài)管理工具,使用這兩個(gè)工具可以輕松實(shí)現(xiàn)組件通信。由于這兩個(gè)工具比較強(qiáng)大,這里就不展示了。有關(guān)詳細(xì)信息,請(qǐng)參閱文檔。
最后
以上就是我今天想與你分享的Vue3中的7個(gè)組件通信技巧,如果對(duì)你有幫助的話,請(qǐng)記得點(diǎn)贊我,關(guān)注我,并將這篇文章分享給你的朋友,也許能夠幫助到他。
最后,謝謝你的閱讀。
網(wǎng)頁標(biāo)題:Vue3中的七個(gè)組件通信技巧
轉(zhuǎn)載來源:http://fisionsoft.com.cn/article/djcpeeh.html


咨詢
建站咨詢
