這類問題 首先分類 表明了解的比較多 具體就沒說完 或者漏了 面試官也不會計較很多 組件通信的四大類 父與子 子與父 子與子 跨層級 在細說各種方式 加入自己的理解
1、props和$emit 父組件向子組件傳遞數(shù)據(jù)是通過prop傳遞的,子組件傳遞數(shù)據(jù)給父組件是通過$emit觸發(fā)事件
2、$attrs和$listeners
3、中央事件總線 bus 上面兩種方式處理的都是父子組件之間的數(shù)據(jù)傳遞,而如果兩個組件不是父子關系呢?這種情況下可以使用中央事件總線的方式。新建一個Vue事件bus對象,然后通過bus.$emit觸發(fā)事件,bus.$on監(jiān)聽觸發(fā)的事件。
4、provide和inject 父組件中通過provider來提供變量,然后在子組件中通過inject來注入變量。不論子組件有多深,只要調(diào)用了inject那么就可以注入provider中的數(shù)據(jù)。而不是局限于只能從當前父組件的prop屬性來獲取數(shù)據(jù),只要在父組件的生命周期內(nèi),子組件都可以調(diào)用。
5、v-model 父組件通過v-model傳遞值給子組件時,會自動傳遞一個value的prop屬性,在子組件中通過this.$emit(‘input’,val)自動修改v-model綁定的值
6、$parent和$children
7、boradcast和dispatch
8、vuex處理組件之間的數(shù)據(jù)交互 如果業(yè)務邏輯復雜,很多組件之間需要同時處理一些公共的數(shù)據(jù),這個時候才有上面這一些方法可能不利于項目的維護,vuex的做法就是將這一些公共的數(shù)據(jù)抽離出來,然后其他組件就可以對這個公共數(shù)據(jù)進行讀寫操作,這樣達到了解耦的目的。