Vue中到底是什麼是父組件,什麼是子組件?
這是官方文檔中的例子,我理解的父子組件也寫在了注釋中,但是這並不對啊,根據最後渲染出來的html頁面,並結合根據描述,input元素才是父組件,渲染出來的span元素成了子組件。求大神解答!
在這裡,可以將 #app 元素認為是父組件的模板,它就是起著父組件的作用,&
數據是通過在父組件中的 & 獲得,然後通過 子組件的 v-bind 方法,傳給了子組件。
此時子組件 &
template 屬性只是作為一個模板,顯示數據,本身不是組件。
簡而言之,子組件在父組件的 template 屬性或者是模板中。此處 整個 #app 元素作為父組件的模板, &
我覺得題主的代碼擼不起來,少了個東西(姑且認為是父組件)
這樣才完整
另:我也想知道父組件子組件的具體定義~~按樓上的的說法,這算是父組件么?(總覺得怪怪的)↓
new Vue({
el: "#app",
data: {
mymessage: ""
}
})
我也是覺得vue官網將的教程將的不清楚,無語,這個問題我還在疑惑
1、&(以下簡稱#app)是父組件,&
2、Vue的實例是掛載在父組件上的,也是就#app上的,正如回答中:
new Vue({
el: "#app",
data: {
mymessage: ""
}
})
3、Vue的所有效果渲染都是基於組件的。不用把Vue的父組件子組件關係想得太複雜,它跟html標籤中的父元素子元素關係是一樣的。
4、個人理解,有錯誤的地方,歡迎指出。。我也是初學,剛看到Vue的基礎教程=》組件=》編譯作用域 這裡的父組件子組件時也很疑惑到底什麼是父組件、子組件。仔細琢磨了一下,父子關係都是相對的,不用想得太複雜。
希望看到我回答的大家如果有答案一定要告訴我!!!萬謝!!
我現在搞不懂,到底哪個想法是對的,暫且支持觀點1:
- Vue.component里定義的template部分是子組件,HTML中組件標籤為父組件。
- 包裹組件的那個有Vue實例掛載的元素是父組件,HTML中組件標籤為子組件。
- 另外,沒有寫過組件內還有組件的代碼,不過暫且直觀地認為這種情況下兩個組件為父子關係
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互相為兄弟組件不是這樣理解嗎
推薦閱讀: