前言

上一篇写了“Vue 路由拦截(对某些页面需要登陆才能访问)” 的博客,此篇是续上篇对路由页面模块化,可以看到之前的路由配置都写在main.js中,真正开发肯定不能都写在main.js,所以我们要将有关路由的配置另新建一个文件,然后main.js引入使用即可。

先看看以前的路由写法:

routers.js文件

import ShowBlogs from '../components/ShowBlogs.vue'
import AddBlog from '../components/AddBlog.vue'
import SingleBlog from '../components/SingleBlog.vue'
import Login from '../components/Login.vue'
import Test from '../components/Test.vue'
import Music from '../components/Music.vue'
import SingerSong from '../components/SingerSong.vue'
import TimeL from '../components/TimeL.vue'
import Tqh from '../components/Tqh.vue'
import MusicPlayer from '../components/MusicPlayer.vue'
import SetUp from '../components/SetUp.vue'
import Log from '../components/Log.vue' export default[
{path:"/",name:'login',component:Login},
{path:"/index",name:'index',component:ShowBlogs,meta:{requireAuth:true}},
{path:"/add",name:'add',component:AddBlog,meta:{requireAuth:true}},
{path:"/blog/singleblog/:id",name:'singleblog',component:SingleBlog,meta:{requireAuth:true}},
{path:"/test",name:'test',component:Test},
{path:'/music',name:'music',component:Music,meta:{requireAuth:true}},
{path:'/singerSong/:name',name:'SingerSong',component:SingerSong,meta:{requireAuth:true}},
{path:'/TimeL',name:'TimeL',component:TimeL,meta:{requireAuth:true}},
{path:'/Tqh',name:'Tqh',component:Tqh},
{path:'/MusicPlayer',name:'MusicPlayer',component:MusicPlayer,meta:{requireAuth:true}},
{path:'/setUp',name:'setUp',component:SetUp,meta:{requireAuth:true}},
{path:'/log',name:'log',component:Log,meta:{requireAuth:true}}
]

main.js

import VueRouter from 'vue-router'
import Routes from './router/routers'
Vue.use(VueRouter) //创建路由
const router = new VueRouter({
routes:Routes,
mode:"history" //去掉#
}) new Vue({
el: '#app',
data(){
return{
requireAuthNum:1
}
},
router:Routes,
store,
components: { App },
template: '<App/>',
created () {
router.beforeEach((to, from, next) => {
var _this = this;
// if (to.matched.some(record => record.meta.requireAuth)){ // 判断该路由是否需要登录权限
//以前一直进入114的else是因为,把index赋值给路由,然后就去判断108,又是index(加上meta.requirAuth)所以就进入115的else,进入递归
if(to.meta.requireAuth && _this.requireAuthNum==1){ if(JSON.parse(localStorage.getItem("login"))==null){
console.log('没有登录')
_this.$router.push({path: '/',query: {redirect: to.fullPath}})
next()
} else {
_this.requireAuthNum++;
_this.$router.push({path: to.fullPath})
next()
}
}
else {
_this.requireAuthNum = 1;
next();
}
}); }
})

可以看到main.js的vue生命周期create还写了有关路由的配置,创建路由也可以都不需要写在main.js,可写在routers.js文件中;下面我们就来做调整

新写法(优化)

routers.js

import ShowBlogs from '../components/ShowBlogs.vue'
import AddBlog from '../components/AddBlog.vue'
import SingleBlog from '../components/SingleBlog.vue'
import Login from '../components/Login.vue'
import Test from '../components/Test.vue'
import Music from '../components/Music.vue'
import SingerSong from '../components/SingerSong.vue'
import TimeL from '../components/TimeL.vue'
import Tqh from '../components/Tqh.vue'
import MusicPlayer from '../components/MusicPlayer.vue'
import SetUp from '../components/SetUp.vue'
import Log from '../components/Log.vue' import VueRouter from 'vue-router'
const routes = [
{path:"/",name:'login',component:Login},
{path:"/index",name:'index',component:ShowBlogs,meta:{requireAuth:true}},
{path:"/add",name:'add',component:AddBlog,meta:{requireAuth:true}},
{path:"/blog/singleblog/:id",name:'singleblog',component:SingleBlog,meta:{requireAuth:true}},
{path:"/test",name:'test',component:Test},
{path:'/music',name:'music',component:Music,meta:{requireAuth:true}},
{path:'/singerSong/:name',name:'SingerSong',component:SingerSong,meta:{requireAuth:true}},
{path:'/TimeL',name:'TimeL',component:TimeL,meta:{requireAuth:true}},
{path:'/Tqh',name:'Tqh',component:Tqh},
{path:'/MusicPlayer',name:'MusicPlayer',component:MusicPlayer,meta:{requireAuth:true}},
{path:'/setUp',name:'setUp',component:SetUp,meta:{requireAuth:true}},
{path:'/log',name:'log',component:Log,meta:{requireAuth:true}}
]
const router = new VueRouter({
routes:routes,
mode:"history" //去掉#
}) router.beforeEach((to, from, next) => {
var _this = this;
// if (to.matched.some(record => record.meta.requireAuth)){ // 判断该路由是否需要登录权限
//以前一直进入114的else是因为,把index赋值给路由,然后就去判断108,又是index(加上meta.requirAuth)所以就进入115的else,进入递归
if(to.meta.requireAuth && _this.requireAuthNum==1){ if(JSON.parse(localStorage.getItem("login"))==null){
console.log('没有登录')
next({
path: '/',
query: {redirect: to.fullPath} //登录成功后重定向到当前页面
});
// _this.$router.push({path: '/',query: {redirect: to.fullPath}})
// next()
} else {
_this.requireAuthNum++;
next({
path: to.fullPath
});
// _this.$router.push({path: to.fullPath})
// next()
}
}
else {
_this.requireAuthNum = 1;
next();
}
});
export default router;

main.js

import VueRouter from 'vue-router'
import Routes from './router/routers'
Vue.use(VueRouter) new Vue({
el: '#app',
data(){
return{
requireAuthNum:1
}
},
router:Routes,
store,
components: { App },
template: '<App/>',
})

可以看到main.js以前有创建路由、vue实例的created的路由拦截,都写在routers.js文件中。

注意:routers.js是不可以 使用_this.$router.push({path: '/',query: {redirect: to.fullPath}}),也就是说在routers文件下使用_this.$router没有这个对象,所以push会报错,只有在非此文件就可以使用this.$router.push,所以我们要对routers.js的路由拦截的beforeEach生命周期做下改变,

将以前 _this.$router.push({path: '/',query: {redirect: to.fullPath}}) ; next();这种写法改成

next({ path: '/', query: {redirect: to.fullPath}  });

这样就将router和main文件分开下,真正得到模块化开发!

Vue 路由(对路由页面编写做规范)的更多相关文章

  1. 三、vue如何配置路由 、获取路由的参数、部分刷新页面、缓存页面

        1.路由配置:所有的启动文件都在最初始的main.js文件里面,这个文件中首先需要引入: 2.路由文件配置说明: 3.如何获取页面url的参数? this.$route.query 4.页面之 ...

  2. $Django 路飞之小知识回顾,Vue之样式element-ui,Vue绑定图片--mounted页面挂载--路由携带参数

    一 小知识回顾 1 级联删除问题 2 一张表关联多个表,比如有manytomanyfileds forignkey,基于对象查询存在的问题:反向查询的时候  表名小写_set.all()不知是哪个字段 ...

  3. vue如何配置路由 、获取路由的参数、部分刷新页面、缓存页面

    vue如何配置路由 .获取路由的参数.部分刷新页面.缓存页面:http://www.mamicode.com/info-detail-1941546.html vue-router传递参数的几种方式: ...

  4. Vue 实现动态路由及登录&404页面跳转控制&页面刷新空白解决方案

    Vue实现动态路由及登录&404页面跳转控制&页面刷新空白解决方案   by:授客 QQ:1033553122   开发环境   Win 10   Vue 2.9.6   node-v ...

  5. 浅入深出Vue:自动化路由

    在软件开发的过程中,"自动化"这个词出现的频率是比较高的.自动化测试,自动化数据映射以及各式的代码生成器.这些词语的背后,也说明了在软件开发的过程中,对于那些重复.千篇一律的事情. ...

  6. vue --》动态路由的实现 (根据用户的权限来访问对应的模块)

    为了设置用户的访问权限,所以在一个vue工程中,往往需要前端和后端开发人员共同配合设置动态路由, 进而实现根据用户的权限来访问对应的模块 1.首先在登录页面,前端跟据后端返回的路由信息进行配置,配置后 ...

  7. 06 Vue路由简介,原理,实现及嵌套路由,动态路由

    路由概念 路由的本质就是一种对应关系,比如说我们在url地址中输入我们要访问的url地址之后,浏览器要去请求这个url地址对应的资源. 那么url地址和真实的资源之间就有一种对应的关系,就是路由. 路 ...

  8. vue 2.0 路由切换以及组件缓存源代码重点难点分析

    摘要 关于vue 2.0源代码分析,已经有不少文档分析功能代码段比如watcher,history,vnode等,但没有一个是分析重点难点的,没有一个是分析大命题的,比如执行router.push之后 ...

  9. vue的动态路由(登录之后拿到动态路由通过addRouters()动态添加路由)

    登录后我们拿到路由动态路由,后端传的数据可能为这个 { path: '/index', meta: { title: '首页', icon: 'icon-shouye', tab_index: , / ...

随机推荐

  1. CentOS 安装 Mongodb详解 --- 无Linux基础

    先去官方下载离线安装包:https://www.mongodb.com/ ftp连接一下服务器,把离线包上传上去 XShell连接一下: 解压文件(你输一点就可以按tab键,它会自动补全):tar - ...

  2. leetcode1282 用户分组

    class Solution { public: vector<vector<int>> groupThePeople(vector<int>& group ...

  3. shell做成csv文件

    echo a,b,c,d >aa.csv 其实就是用逗号做分隔符

  4. 堆的ptmalloc机制

    ptmalloc下堆的分配和回收 ptmalloc内存分配 1) 获取分配区的锁,为了防止多个线程同时访问同一个分配区,在进行分配之前需要取得分配区域的锁.线程先查看线程私有实例中是否已经存在一个分配 ...

  5. lab 颜色模式的生理原因 黄色, 洋红色 刺眼。 绿色,蓝色,不刺眼。

    hsb 颜色模式理解了. lab 颜色模式,都说是生理原因.没说是啥生理原因. 猜测:黄色, 洋红色 刺眼.   绿色,蓝色,不刺眼. https://blog.csdn.net/self_mind/ ...

  6. ELK 日志平台构建

    elastic中文社区 https://elasticsearch.cn/ 完整参考 ELK实时日志分析平台环境部署--完整记录 https://www.cnblogs.com/kevingrace/ ...

  7. k8s1.11.0安装、一个master、一个node、查看node名称是主机名、node是扩容进来的、带cadvisor监控服务

    一个master.一个node.查看node节点是主机名 # 安装顺序:先在test1 上安装完必要组件后,就开始在 test2 上单独安装node组件,实现node功能,再返回来配置test1加入集 ...

  8. vs2008,windows mobile 6 搭建PDA开发环境相关软件下载

    1.Windows Mobile 6.5 Professional Developer Tool Kit (CHS).msi 下载地址:https://download.microsoft.com/d ...

  9. react中component存在性能问题

    Component存在的问题? 1). 父组件重新render(), 当前组件也会重新执行render(), 即使没有任何变化 2). 当前组件setState(), 重新执行render(), 即使 ...

  10. 微信路由navigateTo

    // pages/index/index.js Page({ /** * 页面的初始数据 */ data: { res:2 }, search: function(e) { var that = th ...