多頁(yè)面跳轉(zhuǎn) A =>B =>A 即使都使用$router.place,回到A時(shí),A里面用addEventListner注冊(cè)的事件沒(méi)移除,多次注冊(cè)事件。
-
方法 一
/* 組件銷毀前移除事件 */ berforeDestroy(){ removeEventListner(event, eventFun) } // event : {string} 事件名(必須) // eventFunName: {function} 與這個(gè)事件綁定的函數(shù)(必須,addEventListner可以同時(shí)事件注冊(cè)多個(gè)相應(yīng)函數(shù)) /* 這就需要A頁(yè)面中的每一個(gè)組件只要用到addEventListner注冊(cè)事件,都需要這樣寫(xiě)去主動(dòng)銷毀事件。*/ /* removeEventListner不支持匿名函數(shù): */ ele.addEventListner('click',()=>{console.log('匿名函數(shù)')}) // 這種就沒(méi)辦法通過(guò)removeEventListner來(lái)移除,因?yàn)榈诙€(gè)參數(shù)必須,匿名函數(shù)沒(méi)名字。 -
方法 二
/* 用on的方式注冊(cè)事件 */ ele.onclick = function(){} // on的方式注冊(cè)事件是不可以重復(fù)的,即由B回到A時(shí),雖然上次的事件沒(méi)移除,但這次再注冊(cè)就把上次的覆蓋了。
-
方法 三
// 妥協(xié)方案,打開(kāi)新的窗口。(但有些時(shí)候需求就是要打開(kāi)新的窗口) // 即兩個(gè)頁(yè)面互不相干 openNewWindow(){ let routeUrl = this.$router.resolve({ path: "/pageB", query: {id:96} //還可以帶參數(shù)過(guò)去 }); window.open(routeUrl.href, '_blank'); }