在Vue組件淺顯易懂的核心中,我們發(fā)現(xiàn)了一個經(jīng)常被用到的方法,叫做反向引用組件。它允許你在父組件中訪問子組件,雖然在原理和方式上它與簡單的組件綁定不同,卻是非常有用的一種技術(shù)。
如何使用反向引用組件?對于希望在父組件中引用子組件的開發(fā)者來說,這個技術(shù)很容易理解。在組件注冊時,將其child指令設(shè)置為true。這意味著該組件實例將存儲在其父組件實例中,而父組件實例僅有在它創(chuàng)建其子組件實例時才能訪問它們。
Vue.component('child-component',{ child: true, data(){ return{ message:"Hello Vue.js" } } })
上述代碼的意義是,在該子組件初始化時自動注冊一個child組件,即創(chuàng)造一個反向鏈接。這個鏈接的結(jié)果就是,當(dāng)父組件調(diào)用子組件時,其實它在調(diào)用已經(jīng)存在于父組件中的子組件對象。
除此以外,反向引用組件還可以用來實現(xiàn)很多復(fù)雜的交互需求。例如,你可以使用它來改變子組件的狀態(tài)。為了實現(xiàn)這一功能,你需要為你的子組件編寫一個方法來更新其狀態(tài)屬性,并在父組件中通過引用該方法來實現(xiàn)調(diào)用。
Vue.component('child-component', { child: true, data(){ return{ message: "Hello Vue.js", count: 0 } }, methods:{ increment(){ this.count++; } } }) const vm =new Vue({ el:"#app", methods:{ onClick(){ this.$children.forEach(child =>{ if(child.hasOwnProperty('increment')){ child.increment(); } }); } } })
在這段代碼中,我們創(chuàng)建了一個計數(shù)器組件,并將其綁定到父組件上。當(dāng)你在父組件中調(diào)用onClick方法時,你會發(fā)現(xiàn)該方法會遍歷所有子組件,并調(diào)用其中改變組件狀態(tài)的increment方法。這個東西還不錯,不過我們得注意一下組件之間的耦合度問題。
上述方法中,我們需要自己依次遍歷我們要找尋的組件,這就會有一定的復(fù)雜度,而且一旦組件內(nèi)部發(fā)生變化,我們也需要進(jìn)行相關(guān)的更新操作才能繼續(xù)使用反向引用組件。即便如此,反向引用組件依然存有極大的價值。