最近在用Vue作項目,對於Vue的組件總有點模棱兩可的理解,今天突然發現是對父組件和子組件在概念上有理解的問題,剛剛仔細研究了一下,很有所得,記錄一下。html
我在Vue的官網和書上沒有找到父子組件在概念上的解釋,但想要理解而且運用好組件,在概念上理解父子組件是很重要的。
通常來講,對於父組件的理解就是html中的自定義標籤,子組件是Vue自定義組件中的模版標籤,好比對於以下代碼:vue
<div id="app36"> <testcomponent></testcomponent> </div> <script> Vue.component('testcomponent', { data: function(){ return {count: 0} }, template: '<button v-on:click="count++">You clicked me {{ count }} times.</button>' }) var app=new Vue({ el: '#app35' }) </script>
通常都會以爲父組件是<testcomponent></testcomponent>
,或加上包含他的<div id="app36">
,子組件是template: '<button v-on:click="count++">You clicked me {{ count }} times.</button>'
。
這種理解雖然勉強正確,可是有很大問題,想要理解父子組件或兄弟組件之間的通訊,這樣的理解遠遠不夠。java
真正的父組件或子組件,應該站在更底層的角度去理解,我目前對父組件的理解是: 父組件是已被掛載的vue實例,而子組件,是被這個實例調用的自定義組件自己,而不單單是自定義標籤或自定義組件中的模版標籤。
在這個例子中,父組件是var app1=new Vue({el: '#app36'})
, 而子組件是自定義的組件總體。編程
我爲何會有這樣的理解?說到這個問題,我須要提到後端的思惟模式,好比java,java裏也有父類子類,而對java來講,所謂的子類並不單單是帶着父類方法,還有虛擬機中一整套的父類的定義,這是在內存中編譯好的一處空間。我對於Vue目前並不熟悉,但它在不少方面相似後端編程語言,因此站在底層去思考仍是頗有必要的。後端