在Vue中,想要實現(xiàn)兄弟組件之間進行傳值,或者想要跨級組件進行傳值的情況,可以使用eventbus。eventbus就是一個事件總線,可以用來在組件之間進行傳值。具體的實現(xiàn)步驟如下。
首先,在一個單獨的js文件中,定義一個Vue實例,這個實例可以用來進行事件的監(jiān)聽和觸發(fā)。在該實例中,可以使用$on方法來監(jiān)聽事件,$emit方法來觸發(fā)事件。代碼如下:
import Vue from 'vue' export default new Vue() //監(jiān)聽事件 eventbus.$on('eventName', (data) =>{ console.log(data) }) //觸發(fā)事件 eventbus.$emit('eventName', '傳遞的數(shù)據(jù)')
然后,在需要傳值的組件中,可以使用import導入這個eventbus實例,然后在需要傳遞數(shù)據(jù)的地方,使用$emit觸發(fā)事件。具體實現(xiàn)如下:
import eventbus from '@/utils/eventbus.js' export default { methods: { handleClick () { eventbus.$emit('eventName', '傳遞的數(shù)據(jù)') } } }
在接收數(shù)據(jù)的組件中,需要先導入eventbus實例,然后使用$on來監(jiān)聽事件,在回調(diào)函數(shù)中讀取傳遞過來的數(shù)據(jù)。代碼如下:
import eventbus from '@/utils/eventbus.js' export default { data () { return { data: '' } }, created () { eventbus.$on('eventName', (data) =>{ this.data = data console.log(this.data) }) } }
值得注意的是,如果一個組件同時監(jiān)聽了多個事件,可以使用$off來取消事件的監(jiān)聽。$off方法有兩個參數(shù),第一個參數(shù)是事件的名稱,第二個參數(shù)是回調(diào)函數(shù)。如果第二個參數(shù)不傳遞,則會取消該事件名稱下的所有回調(diào)函數(shù)。代碼如下:
import eventbus from '@/utils/eventbus.js' export default { created () { //監(jiān)聽事件 eventbus.$on('eventName', this.handleEvent) //取消事件監(jiān)聽 eventbus.$off('eventName', this.handleEvent) }, methods: { handleEvent (data) { console.log(data) } } }
除了使用eventbus進行傳值外,Vue還提供了其他幾種方法來進行組件之間的傳值,比如props、$emit、provide/inject等。不同的情況下可以選擇不同的方式來實現(xiàn)。需要根據(jù)具體的需求來進行選擇。
上一篇dw如何引入json文件
下一篇cmd運行vue項目