最近在用vue做項(xiàng)目,學(xué)習(xí)了不少東西,但是有時(shí)候光顧著做項(xiàng)目卻忘記要找個(gè)時(shí)間來(lái)整理一下最近的一些學(xué)習(xí)新得,因?yàn)槭切率郑钥赡軙?huì)有錯(cuò)誤的地方,歡迎指出和交流呀~~~
從網(wǎng)站建設(shè)到定制行業(yè)解決方案,為提供網(wǎng)站制作、成都網(wǎng)站制作服務(wù)體系,各種行業(yè)企業(yè)客戶提供網(wǎng)站建設(shè)解決方案,助力業(yè)務(wù)快速發(fā)展。成都創(chuàng)新互聯(lián)將不斷加快創(chuàng)新步伐,提供優(yōu)質(zhì)的建站服務(wù)。
關(guān)于父子組件以及非父子組件之間的數(shù)據(jù)通信
1 父子組件之間數(shù)據(jù)通信
一般父組件向子組件傳遞數(shù)據(jù)用prop進(jìn)行傳遞,注意,子組件不能對(duì)prop中的數(shù)據(jù)進(jìn)行更改,vue中規(guī)定是防止子組件對(duì)父組件中的數(shù)據(jù)進(jìn)行竄改。而子組件向父組件進(jìn)行數(shù)據(jù)傳遞則可以通過(guò)事件觸發(fā)父組件的事件來(lái)實(shí)現(xiàn)數(shù)據(jù)的傳遞。(是不是有點(diǎn)懵逼了,看個(gè)例子吧 )
(這里我就直接摘取一段項(xiàng)目中的例子代碼來(lái)說(shuō)明)
使用prop進(jìn)行數(shù)據(jù)傳遞:
//這是父組件中的部分代碼,父組件向子組件傳遞數(shù)據(jù)(method,dialogFormvisible) // 父組件的部分代碼 新增員工
在chrome中用vue-devtool其實(shí)也可以看到相關(guān)的數(shù)據(jù)屬性;
當(dāng)然,子組件做完相關(guān)操作之后,需要時(shí)間的是將屬性值dialogFormVisible重新修改為false。若是直接在子組件進(jìn)行修改的話,就會(huì)報(bào)錯(cuò),因?yàn)闀?huì)影響到父組件的數(shù)據(jù),vue中規(guī)定不能直接對(duì)prop的屬性值進(jìn)行修改。那么就可以用事件觸發(fā)來(lái)實(shí)現(xiàn)子組件向父組件傳遞數(shù)據(jù)了。
///父組件監(jiān)聽(tīng)子組件的事件,通過(guò)@close="closeDialog"和@getEmployee="getEmployee"來(lái)實(shí)現(xiàn)監(jiān)聽(tīng); 一旦子組件中的事件close和getEmployee發(fā)生之后,就會(huì)觸發(fā)父組件中的事件closeDialog和getEmployee事件。 // 父組件的部分代碼//子組件中的事件分發(fā) export default { methods: { // 關(guān)閉彈出框 closeDialog () { this.$emit('close', false) //這里就是直接觸發(fā)子組件的close事件,一旦這個(gè)執(zhí)行,父組件中的對(duì)應(yīng)方法就會(huì)執(zhí)行。 } } } // 當(dāng)那邊觸發(fā)關(guān)閉事件的時(shí)候,這邊的顯示值就要關(guān)閉,那邊會(huì)傳過(guò)來(lái)一個(gè)false // 父組件的事件 export default { methods: { // 當(dāng)那邊觸發(fā)關(guān)閉事件的時(shí)候,這邊的顯示值就要關(guān)閉,那邊會(huì)傳過(guò)來(lái)一個(gè)false closeDialog (val) { this.dialogFormVisible = val } } }新增員工
這樣就實(shí)現(xiàn)了父子組件之間的數(shù)據(jù)傳遞;
2 實(shí)現(xiàn)非父子組件之間的數(shù)據(jù)傳遞
通過(guò)建立中間的事件bus總線。實(shí)現(xiàn)非父子組件之間的數(shù)據(jù)通信。
1 bus.js文件
//bus.js,注冊(cè)Bus import Vue from 'vue' export default new Vue()
2 組件emit觸發(fā)事件
添加任務(wù)