12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- // 在router 方法中加拦截
- import router from '@/router'
- import store from '@/store';
- // 找到要跳转到的那个路由信息
- const getToRoute=(path)=>{
- const allRoutes=router.getRoutes()
- let routesItem={}
- allRoutes.forEach(route => {
- if(route.path===path){
- routesItem=route
- }
- });
- return routesItem
- }
- const routerPush=router.push //保存原来的push函数
- // 重写push函数
- router.push = function push(location) {
- // location 可能是string 也可能是obj 完全取决于 你是怎么调push的
- // console.log('push');
- // console.log(location);
- let path=''
- let query=null
- // 判断location是string 还是obj
- if(typeof location === 'string'){
- path=location
- }else{
- path=location.path
- query=location.query
- }
- // 判断是否已经存在面包屑中
- let index=-1
- store.state.breadCrumbList.forEach((item,e) => {
- if(item.path === path){
- index=e
- }
- });
- if(index===-1){//不存在
- const routesItem=getToRoute(path)
- store.commit('setBreadCrumb', routesItem)
- }else{
- // console.log('拦截路由push改为返回');
- const _index=index-(store.state.breadCrumbList.length-1)
- if(_index!==0){
- router.go(_index)
- }
- setTimeout(() => {
- if(query){
- router.replace({
- query:query
- })
- }else{
- router.replace(path)
- }
- }, 10);
- return
- }
- // 调用原来的push函数,并捕获异常
- return routerPush.call(this, location).catch(error => error)
- }
- // 监听路由后退事件
- const listenRouterBack=()=>{
- if(window.history&&window.history.pushState){{
- $(window).on('popstate',()=>{
- console.log('路由后退');
- const path=window.location.pathname
- const routesItem=getToRoute(path)
- store.commit('setBreadCrumb', routesItem)
- })
- }}
- }
- listenRouterBack()
|