当前位置:首页 > VUE

vue里面动态路由实现

2026-01-21 23:11:26VUE

动态路由实现方法

在Vue中实现动态路由通常涉及两种场景:基于用户权限的动态路由和基于参数的路由匹配。以下是具体实现方式:

基于用户权限的动态路由

  1. 定义静态路由与动态路由 静态路由为无需权限的公共页面(如登录页),动态路由根据用户角色从后端获取。

    vue里面动态路由实现

    // router/index.js
    const staticRoutes = [
      { path: '/login', component: Login },
      { path: '/404', component: NotFound }
    ]
    
    const dynamicRoutes = [
      { path: '/admin', component: Admin, meta: { role: 'admin' }},
      { path: '/user', component: User, meta: { role: 'user' }}
    ]
  2. 路由拦截与动态添加 在全局前置守卫中请求用户权限数据,过滤出有权限的路由并动态添加。

    router.beforeEach(async (to, from, next) => {
      const hasToken = localStorage.getItem('token')
      if (hasToken) {
        if (to.path === '/login') {
          next('/')
        } else {
          if (!store.state.user.addedRoutes) {
            const roles = await getCurrentUserRoles()
            const accessibleRoutes = filterRoutes(dynamicRoutes, roles)
            router.addRoutes(accessibleRoutes)
            store.commit('user/SET_ADDED_ROUTES', true)
            next({ ...to, replace: true })
          } else {
            next()
          }
        }
      } else {
        next('/login')
      }
    })
  3. 路由过滤函数 根据用户角色筛选可访问路由。

    vue里面动态路由实现

    function filterRoutes(routes, roles) {
      return routes.filter(route => {
        if (route.meta && route.meta.role) {
          return roles.includes(route.meta.role)
        }
        return true
      })
    }

基于参数的路由匹配

  1. 路由配置 使用冒号声明动态路径参数。

    const routes = [
      { path: '/user/:id', component: UserDetail }
    ]
  2. 组件内获取参数 通过$route对象或props接收参数。

    // 方式1:通过$route
    export default {
      created() {
        console.log(this.$route.params.id)
      }
    }
    
    // 方式2:通过props(推荐)
    const routes = [
      { path: '/user/:id', component: UserDetail, props: true }
    ]
    export default {
      props: ['id'],
      created() {
        console.log(this.id)
      }
    }

动态路由的注意事项

  • 使用addRoutes添加的路由在刷新后会丢失,需要配合vuex持久化存储权限信息
  • 404页面路由需最后添加,否则会拦截动态路由
  • 动态参数变化时组件会复用,需要通过监听$route或使用beforeRouteUpdate钩子更新数据
export default {
  watch: {
    '$route'(to, from) {
      if (to.params.id !== from.params.id) {
        this.fetchData()
      }
    }
  },
  methods: {
    fetchData() {
      // 获取新数据
    }
  }
}

标签: 路由里面
分享给朋友:

相关文章

vue实现权限路由

vue实现权限路由

Vue 权限路由实现方法 基于路由元信息(meta)和全局前置守卫 在路由配置中通过 meta 字段标记权限标识,结合 router.beforeEach 实现动态拦截: // router.js…

vue路由实现segment

vue路由实现segment

Vue 路由实现 Segment 风格路由 在 Vue Router 中实现类似 Segment 风格的路由(即扁平化、无嵌套的 URL 结构),可以通过动态路由和编程式导航实现。 安装 Vue R…

vue实现路由原理

vue实现路由原理

Vue 路由实现原理 Vue Router 是 Vue.js 官方的路由管理器,用于构建单页面应用(SPA)。其核心原理基于前端路由技术,通过监听 URL 变化并动态渲染组件。 路由模式 Vue R…

vue实现动态路由界面

vue实现动态路由界面

Vue 动态路由的实现方法 Vue 动态路由可以通过 Vue Router 实现,主要包括路由配置、动态参数传递和组件渲染等步骤。以下是具体实现方法: 配置动态路由 在 Vue Router 的路由…

vue3实现路由

vue3实现路由

Vue 3 实现路由的方法 Vue 3 中实现路由通常使用 vue-router 库,以下是具体实现步骤: 安装 vue-router 使用 npm 或 yarn 安装 vue-router: n…

vue路由缓存实现原理

vue路由缓存实现原理

Vue 路由缓存的实现原理 Vue 路由缓存主要通过 <keep-alive> 组件和路由配置的 meta 字段实现,用于保留组件状态或避免重新渲染。 核心机制 <keep-ali…