首先是組件之間的通信方式
- 父組件到子組件的通信:
props和$refs
- 子組件到父組件的通信:
events 和 $parents 以及 $root
- 組件之間的通信
eventBus和vuex
eventBus的使用:
引入vue的eventBus:import Vue from 'vue';
export default new Vue();
之后,
首先掛載事件: bus.$on('onChange', (params) => this.open(params));
然后再調用:bus.$emit('onChange', params)
不使用的時候要在聲明周期鉤子的destroyed中銷毀,因為eventBus不能自動銷毀。bus.$off('onChange')
在使用event-bus的時候需要結合生命周期鉤子并用在合適的生命周期內。
例如: 如果要在A頁面之中使用eventBus通過事件名‘onChange’將參數params傳遞到B頁面
(1). 首先應該在AB頁面中分別引入新的Vue對象,作為eventBus的載體,這時候可以建立一個公共文件,作為eventBus的載體
event-bus.js:
import Vue from 'vue'; export default new Vue();
在A.vue和B.vue文件中引入
import EventBus from 'event-bus.js'
(2). 在B頁面中,掛載上EventBus事件,掛載事件發生在mounted的時候。
EventBus.$on('onChange', params)
(3). 在A頁面中 ,emit事件
EventBus.$emit('onChange', {a:1})
這樣就可以把A頁面中的參數a的值1傳遞到B頁面中使用了。
(4). 最后在B頁面的destory()生命周期中銷毀。
EventBus.$off('onChange')
(5). 但是有一點需要注意, 需要注意A,B頁面中生命周期的順序,需要優先加載A頁面,先將事件掛載上,否則參數根本傳不過來,再一點,如果不銷毀EventBus事件,會累計調用這個事件,隨著點擊次數增加。
v-if和v-show的區別已經適宜的使用場景
v-if是真正的條件渲染,條件切換的時候,子組件等也會隨著銷毀和重建,并且v-if的渲染是惰性的,知道條件為真時,組件才會被渲染。
v-show是組件頁面渲染的時候就被渲染了,不管條件是否為真,條件只是用來單純的切換css的變化控制顯示隱藏。
v-if切換的時候開銷大,v-show初始渲染時候開銷比較大,所以,頻繁切換的時候使用v-show, 如果判斷條件比較少,就使用v-if。