addRoute动态添加路由与重置路由

addRoute动态添加子路由

router.addRoute('main',item)//main插入路由的name,item插入的子路由

问题: addRoutes 方法仅仅是帮你注入新的路由,并没有帮你剔除其它路由。导致以下警告
在这里插入图片描述

解决方法:
routrer文件夹index.js

import Vue from 'vue'
import Router from 'vue-router'

Vue.use(Router)

const routes = [
  {
    path:'/login',
    name:'登录',
    component:() => import('@/views/login/login.vue')
  },
  {
    path: '/',
    name: 'main',
    redirect: '/home',
    component: () => import('@/views/main.vue'),
  },
]

//写成函数模式
const createRouter = () => new Router({
  mode: 'history',
  base: process.env.BASE_URL,
  routes
})


//重置路由
const router = createRouter()
export function resetRouter () {
const newRouter = createRouter()
router.matcher = newRouter.matcher // the relevant part
}

export default router

注销登录时调用

import { resetRouter } from  '@/router/index'//导入
export default {
  methods:{
  	//注销登录
    outLogin(){
      //使用重置路由
      resetRouter()
      //清空localStorage
      window.localStorage.clear()
      this.$router.replace('/login')
    },
  }
}

拓展使用addRoute的一些坑
1.动态添加路由,刷新页面,路由会丢失

     解决办法:在路由守卫beforeEach里面判断,如果浏览器刷新没有数据,从新请求数据并添加路由,(这里可以存在vuex里面)

              最后通过 return next({ ...to, replace: true }); 重定向到应该跳到的路由

2.path: ‘*’,匹配找不到页面时,404处理,因为路由添加和查找路由机制都是依次执行的,先添加了静态路由,

  在添加动态路由时,添加的路由就会在静态路由后面,会优先匹配上path: '*' 页面,next({ ...to, replace: true })

  这一步可以打印看一下,第一次的path是你原本路由,但是因为先匹配上了path: '*',就导致走不到后面动态添加的路由,

     解决办法:添加动态路由最后,在添加一次path: '*',需要name一致,覆盖掉静态路由的,path: '*',

     (需要注意)静态路由也需要path: '*',这里的path:'*',一般用做容错处理,只要没有的页面,都匹配上并跳转到404页面

3.a账号权限多,退出时页面没有刷新,b权限少,登录以后可以通过地址栏访问a才能访问的页面

     解决办法:重置路由,使用 router.matcher = new VueRouter({

                                routes: routes, // routes 是你的静态路由

                             }).matcher;

              如果是router 4.X 可以直接使用 removeRoute API

4.添加路由时,如果子级没有添加到父级路由下,不能通过 父级路由/子级路由访问,只能按照一级路由访问

  且子级路由添加到父级路由时,需要拼接父级路由否则也不能访问

     解决办法:在判断需要添加到指定父级下时,拼接父级和子级路由,并通过addRoute 传递第一个参数为,

     父级name的参数,添加到指定父级下,就可以达到,单独访问子级生效,及父级+子级路由访问生效,

     “这里为什么能单独访问也能生效,应该是添加父级时存在子级存在,所以可以通过子级直接访问”
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
内网和外网互联可以通过添加路由命令route add来实现。 在计算机网络中,内网指的是局域网(LAN),即一个有限范围内的网络,而外网则是指广域网(WAN),即全球范围内的网络。 要实现内网和外网的互联,需要在连接内网和外网的设备上添加路由命令。route add命令用于在路由表中添加一条新的路由。这样,当数据包从内网发送到外网时,路由器会根据路由表中的设置,将数据包传输到外网,从而实现内网和外网的互联。 具体操作如下: 1. 打开命令提示符或终端窗口,进入路由器或连接内网和外网的设备。 2. 输入“route add”命令,后面跟上要添加的目标网络的网络地址。例如,如果要添加的目标网络的IP地址为192.168.1.0,可以输入“route add 192.168.1.0”。 3. 接下来,输入子网掩码。子网掩码用于确定网络中的IP地址范围。例如,如果子网掩码为255.255.255.0,则表示网络中的IP地址的前三个段(例如192.168.1)是相同的。 4. 最后,输入网关的IP地址。网关是连接内网和外网的设备的IP地址,用于将数据包从内网传输到外网。例如,输入192.168.0.1作为网关的IP地址。 在添加路由命令后,包含目标网络地址的数据包就会被路由器传送到外网,实现内外网的互联。 需要注意的是,具体的路由命令可能因设备和操作系统的不同而略有差异,以上是一个基本的示例。在实际操作中,可以根据具体情况进行调整。另外,添加路由命令的权限通常需要管理员或超级用户权限。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值