当前位置:首页 > VUE

vue里面动态路由实现

2026-01-21 23:11:26VUE

动态路由实现方法

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

基于用户权限的动态路由

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

    // 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. 路由过滤函数 根据用户角色筛选可访问路由。

    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接收参数。

    vue里面动态路由实现

    // 方式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 路由实现思路 Vue 路由的核心是通过 Vue Router 库实现的单页面应用(SPA)路由管理。以下是关键实现思路和步骤: 安装 Vue Router 通过 npm 或 yarn 安装…

vue路由实现思路

vue路由实现思路

Vue 路由实现思路 Vue 路由的核心是通过 Vue Router 库实现单页应用(SPA)的页面切换,避免整页刷新。以下是关键实现思路: 安装与引入 Vue Router 通过 npm 或 ya…

js实现vue路由

js实现vue路由

Vue 路由的基本实现 在 Vue.js 中实现路由功能通常使用 Vue Router 库。Vue Router 是 Vue.js 官方的路由管理器,用于构建单页面应用(SPA)。 安装 Vue R…

vue路由怎么实现

vue路由怎么实现

Vue 路由实现方法 Vue 路由通常通过 vue-router 库实现,以下是具体实现步骤: 安装 vue-router 在项目中运行以下命令安装 vue-router: npm install…

react如何获取路由

react如何获取路由

获取当前路由路径 在React中获取当前路由路径可以通过react-router-dom提供的useLocation钩子。useLocation返回一个包含当前路由信息的对象,其中pathname属性…

php 路由实现的

php 路由实现的

PHP 路由实现方法 基于原生 PHP 实现路由 创建一个简单的路由解析器,通过解析 URL 路径来调用对应的控制器或函数。 // 定义路由表 $routes = [ '/' => '…