Vue組件之詳細理解並使用props和$emit()

一、props的使用

父組件的數據需要通過 props 把數據傳給子組件,子組件需要顯式地用 props 選項聲明 “prop”。
個人理解是:props是在子組件裏面寫的,其值爲一個數組,即props:[keyName]。其中的keyName是要傳遞的參數,但它是如何綁定到父組件的數據呢?在父組件裏面用到子組件的時候,就在父組件文件中的子組件標籤裏面進行綁定keyName,然後keyName的值就是要綁定的父組件的數據。子組件裏面要用到父組件數據時就直接用keyName就行。
實例如下:

下面畫藍線的就表示是props裏面的屬性參數名,畫紅線的就是父組件的數據。可以清晰的看到父組件的數據firstName只在父組件裏面出現,在父組件裏面傳遞給parentData,然後子組件裏面就只需用到parentData就行了,就不用出現firstName。因爲parentData代表的就是firstName
在這裏插入圖片描述
在這裏插入圖片描述
效果圖如下:用了v-model動態的改變firstName的值然後傳遞到子組件中
在這裏插入圖片描述
仔細看可以發現上面是動態的改變子組件裏面的props的值parentData,其實這樣是報錯的,因爲不允許動態改變props的值。下面優化了一下,是動態的改變父組件裏面的數據firstName,然後傳遞到子組件,子組件也就是動態變化的。如下:
在這裏插入圖片描述
優化後效果如下:
在這裏插入圖片描述

二、$emit()的使用

因爲vue更推薦單向數據流,所以子組件向父組件傳遞數據就需要通過$emit()再通過裏傳遞的事件來傳遞數據。子組件可以通過 $emit()觸發父組件中的自定義事件。

個人理解:vm.$emit(eventName,dataName),其中eventName是一個字符串,名字自起,dataName可以是data對象裏面的數據名或者可以直接是數據字符串。
下面的例子中eventName我取得是clickEvent.dataName是data裏面的firstName。然後在子組件裏面的 < template></ template>裏面的標籤元素中進行事件綁定。
即v-on:eventName = clickEvent(其中eventName可以是click、mousedown之類)再然後在父組件的< template>< /template>裏面的標籤元素上通過子組件的clickEvent進行綁定父元素裏面的自定義事件,即v-on:clickEvent = ‘parentEventName’。
代碼如下:
在這裏插入圖片描述
在這裏插入圖片描述
效果圖如下:點擊按鈕就會觸發父組件裏面的自定義事件,同時將數據傳送給父組件
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章