博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Vue根据菜单json数据动态按需加载路由Vue-router
阅读量:5951 次
发布时间:2019-06-19

本文共 1711 字,大约阅读时间需要 5 分钟。

每个菜单项对应一个页面组件,根据菜单项动态按需加载路由

路由配置的正确写法:

/*router/index.js*/import Vue from 'vue'import Router from 'vue-router'import url from './url'import store from '../store'Vue.use(Router)const router = new Router({  // mode: 'history',  routes: url,  scrollBehavior (to, from, savedPosition) {    return {      x: 0,      y: 0    }  }})router.beforeEach(({ meta, path, name }, from, next) => {  let { auth = true } = meta  let isAdmin = localStorage.getItem('admin')  let isLogin = Boolean(isAdmin) // true已登录, false未登录  if (auth && !isLogin && path !== '/login') {    return next({ path: '/login' })  }  if (!auth && isLogin && path === '/login') {    return next({ path: '/home' })  }  store.dispatch('CUR_MENU', name)  next()})export default router复制代码
/*router/url.js*/import data from '../store/data.json'const Layout = () => import('@/pages/layout')const Login = () => import('@/pages/login')const NotFound = () => import('@/pages/notFound')function getChildrenPath () {  let childrenPath = []  for (let i in data) {    let sub = data[i].subMenu    for (let j in sub) {      let component = () => import('@/pages' + sub[j].path + '/index.vue')      const item = {        path: sub[j].path,        name: sub[j].name,        component: component      }      childrenPath.push(item)    }  }  return childrenPath}const url = [{  path: '/',  component: Layout,  children: getChildrenPath()}, {  path: '/login',  meta: {    auth: false  },  name: '登录页',  component: Login}, {  path: '*',  name: '404页',  component: NotFound}]export default url复制代码

重点:let component = () => import('@/pages' + sub[j].path + '/index.vue')

动态路径写法,不能省略/index.vue

省略的话不会报错,页面加载也正常,但是会弹警告:

参考:

转载于:https://juejin.im/post/5a6a8f13518825732b1a0c9f

你可能感兴趣的文章