多页面跳转 A =>B =>A 即使都使用$router.place,回到A时,A里面用addEventListner注册的事件没移除,多次注册事件。
-
方法 一
/* 组件销毁前移除事件 */ berforeDestroy(){ removeEventListner(event, eventFun) } // event : {string} 事件名(必须) // eventFunName: {function} 与这个事件绑定的函数(必须,addEventListner可以同时事件注册多个相应函数) /* 这就需要A页面中的每一个组件只要用到addEventListner注册事件,都需要这样写去主动销毁事件。*/ /* removeEventListner不支持匿名函数: */ ele.addEventListner('click',()=>{console.log('匿名函数')}) // 这种就没办法通过removeEventListner来移除,因为第二个参数必须,匿名函数没名字。
-
方法 二
/* 用on的方式注册事件 */ ele.onclick = function(){} // on的方式注册事件是不可以重复的,即由B回到A时,虽然上次的事件没移除,但这次再注册就把上次的覆盖了。
-
方法 三
// 妥协方案,打开新的窗口。(但有些时候需求就是要打开新的窗口) // 即两个页面互不相干 openNewWindow(){ let routeUrl = this.$router.resolve({ path: "/pageB", query: {id:96} //还可以带参数过去 }); window.open(routeUrl.href, '_blank'); }