概述
1.addRouter和addRouters
二者都是动态添加路由。其中addRouters和addRouter的用法差不多,只不过addRouters中要传入数组
router.addRouters(routerData)
而且,addRouters 马上会被删除。
2.动态添加路由。
在路由中配置
router.beforeEach((to, from, next) => {
if (store && store.state.routerNav.length == 0) {
let data = routerdata
//操作后端传来的数据
let routerData = navadd(data)
//添加路由
router.addRoutes(routerData)
//缓存路由
store.commit("addRouterData", data)
//跳转
next({ ...to })
} else {
next()
}
})
//操作后端传来的数据
function navadd(e) {
let routerArrData = []
e.forEach(v => {
routerArrData.push({
path: v.path,
name: v.name,
component: () => import('@/views' + v.path + '.vue')
})
});
return routerArrData
}
解释:
- 定义一个data来接受后端传进来的值。
- 写一个函数 navadd 来处理函数传进来的值,使其能够符合路由的格式。
- 利用 addRouters 添加路由路由
以上就是动态的添加 路由。但是你会发现如果刷新页面,动态添加的路由会消失。这是由于页面刷新时,路由重新初始化,动态添加的路由此时已不存在,只有一些固定路由(比如登录页面)还在。所以要利用路由钩子 beforeEach 来重新添加,因为 beforeEach 每次刷新页面会重新执行。
但是如果不限制,则每次跳转都会请求一次数据,所以要用到vuex。
那么接下来就要缓存路由。
在vuex中定义一个state,名为 routerNav: [] ;
state: {
routerNav: []
},
再在mutation中定义一个方法 来修改 routerNav: []。
mutations: {
addRouterData(state, data) {
state.routerNav = data
}
},
并在router中使用,判断store和store中state的routerNav的长度是否为零来判断是否重新请求数据。并且可以通过
store.commit("addRouterData", data)
来缓存路由,使其可以在其他页面使用。
3.下面是完整代码:
1. 一开始就跳转的静态页面home
<template>
<div>
<div v-for="v in routerNav" :key="v.name">
<router-link :to="v.path">{{ v.name }}</router-link>
</div>
</div>
</template>
<script>
import { mapState } from "vuex";
export default {
name: "home",
data() {
return {
//一开始模拟的数据
//showdata: ["a", "b", "c", "d", "e"],
};
},
computed: {
...mapState(["routerNav"]),
},
};
</script>
<style scoped>
</style>
2.模拟的数据页面routerconfig
let config = [{
path: '/a',
name: 'a',
component: () => import('@/views/a.vue')
}, {
path: '/b',
name: 'b',
component: () => import('@/views/b.vue')
}, {
path: '/c',
name: 'c',
component: () => import('@/views/c.vue')
}, {
path: '/d',
name: 'd',
component: () => import('@/views/d.vue')
}, {
path: '/e',
name: 'e',
component: () => import('@/views/e.vue')
}]
export default config
3.Router页面
import Vue from 'vue'
import VueRouter from 'vue-router'
import routerdata from '../config/routerConfig'
import store from "@/store/index"
Vue.use(VueRouter)
const routes = [
{
path: '/',
name: 'home',
component: () => import('@/views/home.vue')
},
]
const router = new VueRouter({
routes,
history
})
router.beforeEach((to, from, next) => {
console.log(212121321321);
if (store && store.state.routerNav.length == 0) {
let data = routerdata
//操作后端传来的数据
let routerData = navadd(data)
//添加路由
router.addRoutes(routerData)
//缓存路由
store.commit("addRouterData", data)
//跳转
next({ ...to })
} else {
next()
}
})
//操作后端传来的数据
function navadd(e) {
let routerArrData = []
e.forEach(v => {
routerArrData.push({
path: v.path,
name: v.name,
component: () => import('@/views' + v.path + '.vue')
})
});
return routerArrData
}
export default router
4.vuex页面
import Vue from 'vue'
import Vuex from 'vuex'
import { config } from '../config/routerConfig'
Vue.use(Vuex)
export default new Vuex.Store({
state: {
routerNav: []
},
getters: {
},
mutations: {
addRouterData(state, data) {
state.routerNav = data
}
},
actions: {
},
modules: {
}
})
最后
以上就是大胆烧鹅为你收集整理的Vue路由的动态添加和缓存1.addRouter和addRouters2.动态添加路由。3.下面是完整代码:的全部内容,希望文章能够帮你解决Vue路由的动态添加和缓存1.addRouter和addRouters2.动态添加路由。3.下面是完整代码:所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复