問題已經(jīng)解決了! (并非回退操作就不能帶參數(shù)棠耕,如有需要的參考此類做法)
業(yè)務(wù)需求
- 我目前做的是養(yǎng)老服務(wù)的互聯(lián)網(wǎng)產(chǎn)品,在多個(gè)頁(yè)面可以進(jìn)入“醫(yī)院列表”頁(yè)面柠新,選擇要服務(wù)的醫(yī)院窍荧,然后回退回去。比如“首頁(yè)”和“預(yù)約”都可以進(jìn)入“醫(yī)院”頁(yè)面恨憎。
這意味著“醫(yī)院列表頁(yè)”蕊退,并不知道也不需要知道,訪問的上一個(gè)頁(yè)面是哪個(gè)頁(yè)面憔恳,只需要選擇完醫(yī)院之后返回就可以了瓤荔。
當(dāng)然也可以通過傳參來告訴醫(yī)院列表頁(yè),上一個(gè)頁(yè)面的name是什么钥组,然后再回退回去输硝。但如果頁(yè)面多了,想象一下醫(yī)院列表頁(yè)的判斷代碼會(huì)有多少程梦?
解決方案
1. 聲明一個(gè)空的Vue模塊eventBus
import Vue from 'vue'
/**
* 定義空的vue實(shí)例点把,作為 eventbus實(shí)現(xiàn)非父子組件之間的通信(vue2.x中去掉了broadcast)
*/
var eventBus = new Vue({});
export default eventBus;
2. “醫(yī)院列表頁(yè)”通過eventBus.$emit
傳參給上一個(gè)頁(yè)面
import eventBus from '../service/eventbus.js';
methods:{
//列表選中具體醫(yī)院的點(diǎn)擊事件
goback(hospital){
//傳遞一個(gè)map橘荠,choiceHospital是key,hospital是value
eventBus.$emit('choiceHospital',hospital);
//調(diào)用router回退頁(yè)面
this.$router.go(-1);
}
}
3. “首頁(yè)”以及“預(yù)約”頁(yè)面接收參數(shù)
import eventBus from '../service/eventbus.js';
//每次激活時(shí)
activated(){
//根據(jù)key名獲取傳遞回來的參數(shù)郎逃,data就是map
eventBus.$on('choiceHospital', function(data){
//賦值給首頁(yè)的附近醫(yī)院數(shù)據(jù)模型
this.nearestOrg = data;
}.bind(this));
},