Vue中到底是什麼是父組件,什麼是子組件?

這是官方文檔中的例子,我理解的父子組件也寫在了注釋中,但是這並不對啊,根據最後渲染出來的html頁面,並結合

根據描述,input元素才是父組件,渲染出來的span元素成了子組件。

求大神解答!


在這裡,可以將 #app 元素認為是父組件的模板,它就是起著父組件的作用,& 為子組件。

數據是通過在父組件中的 & 獲得,然後通過 子組件的 v-bind 方法,傳給了子組件。

此時子組件 & 內部獲得了 mymessage 數據,將其通過模板渲染到頁面上。

template 屬性只是作為一個模板,顯示數據,本身不是組件。

簡而言之,子組件在父組件的 template 屬性或者是模板中。此處 整個 #app 元素作為父組件的模板, & 在其中渲染,所以 & 為子組件。


我覺得題主的代碼擼不起來,少了個東西(姑且認為是父組件)

這樣才完整

另:我也想知道父組件子組件的具體定義~~按樓上的的說法,這算是父組件么?(總覺得怪怪的)↓

new Vue({
el: "#app",
data: {
mymessage: ""
}
})


我也是覺得vue官網將的教程將的不清楚,無語,這個問題我還在疑惑


1、&(以下簡稱#app)是父組件,&是子組件。&跟&其實沒有關係,這裡的&(其實也是#app的子組件),僅僅為了mymessage的數據變化效果而輔助展示。

2、Vue的實例是掛載在父組件上的,也是就#app上的,正如回答中:

new Vue({
el: "#app",
data: {
mymessage: ""
}
})

3、Vue的所有效果渲染都是基於組件的。不用把Vue的父組件子組件關係想得太複雜,它跟html標籤中的父元素子元素關係是一樣的。

4、個人理解,有錯誤的地方,歡迎指出。。我也是初學,剛看到Vue的基礎教程=》組件=》編譯作用域 這裡的父組件子組件時也很疑惑到底什麼是父組件、子組件。仔細琢磨了一下,父子關係都是相對的,不用想得太複雜。


希望看到我回答的大家如果有答案一定要告訴我!!!萬謝!!

我現在搞不懂,到底哪個想法是對的,暫且支持觀點1:

  1. Vue.component里定義的template部分是子組件,HTML中組件標籤為父組件。
  2. 包裹組件的那個有Vue實例掛載的元素是父組件,HTML中組件標籤為子組件。
  3. 另外,沒有寫過組件內還有組件的代碼,不過暫且直觀地認為這種情況下兩個組件為父子關係

Vue教程中Ctrl+F搜索「父組件」,依順序梳理父組件出現時的描述:

1. 第一次出現,局部註冊:

new Vue({
// ...
components: {
// & 將只在父組件模板中可用
"my-component": Child
}
});

這麼看,是支持觀點2的,但是這是局部組件,其他情況呢?

2. 組件組合

這裡說父組件通過Prop發數據給子組件,子組件通過事件發消息給父組件。

3. 使用Prop傳遞數據

這裡說通過Prop引用父組件的數據,然後舉的例子是:在組件的HTML標籤直接使用字元串,看起來支持觀點1。

4.動態Prop

這裡的例子里,在組件標籤里綁定的數據實際上是來自Vue實例所掛載的元素,但這裡卻用了「每當父組件的數據變化」這樣的說法,看起來是在支持觀點2。

但是這裡要指出一點,如果支持觀點2,則破壞了「父組件不能直接傳數據給子組件,要通過prop」,因為這裡組件標籤是可以直接取到Vue實例的數據parentMsg的。實際上,在學習過程中,代碼實踐發現,組件標籤上用v-for可以直接訪問Vue實例的數據數組,用v-on可以直接用Vue實例的methods里定義的方法。

所以,也可以說還是觀點1正確,父組件還是組件標籤,只不過它把Vue實例的數據和方法綁定到自己身上了,這樣也可以說是「每當父組件的數據發生變化」

5.替換/合併現有的特性

這裡的例子里,又說:「class一個來自組件自身的模板,一個來自父組件」,這個絕對跟Vue實例掛載的元素沒關係了吧?看起來支持觀點1。

6.使用 v-on 綁定自定義事件

這裡說:「父組件可以在使用子組件的地方直接用v-on來監聽子組件觸發的事件」,結合下面的例子:組件定義時設置了click時觸發自定義事件,在組件標籤里使用v-on監聽自定義事件,這麼看來,是支持觀點1的。

但是還是之前提到的:組件標籤里監聽自定義事件的方法是直接用的Vue實例的methods里的方法,暫且還是按4的思路認為支持觀點1吧。

7..sync修飾符

這裡跟上面的4差不多,說「變化也會同步到父組件中所綁定的值」,按觀點1解釋也可以解釋的通。

8.後面的使用插槽分發內容里一系列的說法:

都可以解釋為觀點1,或者進一步的:如果是在組件里使用組件,那被使用的組件的父組件就是外面那層組件

綜上,除了組件內還有組件和局部組件這兩種情況,我暫且支持觀點1,同時按編譯作用域的說法,在觀點1的基礎上再加上一點:這種情況下的父組件像其他正常HTML標籤一樣能訪問Vue實例上的各種數據和方法之類的,因而它的作用域可以解釋為「可訪問它的父級作用域即Vue實例的各種數據和方法」

如果有大神曉得到底咋回事兒的話請一定指教!!!


求正解!!


也是剛開始學習,我是這樣理解的(也許不準確):組件在HTML中的表現是標籤的形式,所以,在這裡父組件應該是外層的div,當父組件中的數據,也就是input內容發生改變後,變化會通過v-bind傳給子組件,渲染出來就是span


應該是div#app是父組件,裡面的input和child是都是div#app子組件,而input和child互相為兄弟組件

不是這樣理解嗎



推薦閱讀:

Vue怎麼和AJAX和其他的方法結合在一起呀?
src屬性綁定出錯?

TAG:前端開發 | Vuejs |