Vue 路由(对路由页面编写做规范)
前言
上一篇写了“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 路由(对路由页面编写做规范)的更多相关文章
- 三、vue如何配置路由 、获取路由的参数、部分刷新页面、缓存页面
1.路由配置:所有的启动文件都在最初始的main.js文件里面,这个文件中首先需要引入: 2.路由文件配置说明: 3.如何获取页面url的参数? this.$route.query 4.页面之 ...
- $Django 路飞之小知识回顾,Vue之样式element-ui,Vue绑定图片--mounted页面挂载--路由携带参数
一 小知识回顾 1 级联删除问题 2 一张表关联多个表,比如有manytomanyfileds forignkey,基于对象查询存在的问题:反向查询的时候 表名小写_set.all()不知是哪个字段 ...
- vue如何配置路由 、获取路由的参数、部分刷新页面、缓存页面
vue如何配置路由 .获取路由的参数.部分刷新页面.缓存页面:http://www.mamicode.com/info-detail-1941546.html vue-router传递参数的几种方式: ...
- Vue 实现动态路由及登录&404页面跳转控制&页面刷新空白解决方案
Vue实现动态路由及登录&404页面跳转控制&页面刷新空白解决方案 by:授客 QQ:1033553122 开发环境 Win 10 Vue 2.9.6 node-v ...
- 浅入深出Vue:自动化路由
在软件开发的过程中,"自动化"这个词出现的频率是比较高的.自动化测试,自动化数据映射以及各式的代码生成器.这些词语的背后,也说明了在软件开发的过程中,对于那些重复.千篇一律的事情. ...
- vue --》动态路由的实现 (根据用户的权限来访问对应的模块)
为了设置用户的访问权限,所以在一个vue工程中,往往需要前端和后端开发人员共同配合设置动态路由, 进而实现根据用户的权限来访问对应的模块 1.首先在登录页面,前端跟据后端返回的路由信息进行配置,配置后 ...
- 06 Vue路由简介,原理,实现及嵌套路由,动态路由
路由概念 路由的本质就是一种对应关系,比如说我们在url地址中输入我们要访问的url地址之后,浏览器要去请求这个url地址对应的资源. 那么url地址和真实的资源之间就有一种对应的关系,就是路由. 路 ...
- vue 2.0 路由切换以及组件缓存源代码重点难点分析
摘要 关于vue 2.0源代码分析,已经有不少文档分析功能代码段比如watcher,history,vnode等,但没有一个是分析重点难点的,没有一个是分析大命题的,比如执行router.push之后 ...
- vue的动态路由(登录之后拿到动态路由通过addRouters()动态添加路由)
登录后我们拿到路由动态路由,后端传的数据可能为这个 { path: '/index', meta: { title: '首页', icon: 'icon-shouye', tab_index: , / ...
随机推荐
- ThinkPHP5+Bootstrap的极速后台开发框架。
fastamin:https://doc.fastadmin.net/docs/index.html 后台读取mysql 注释,所以要注意mysql中注释的填写规则
- .NET DLL 保护措施详解(非混淆加密加壳)
为什么要保护DLL,我就不多说了,各人有各人的理由.总的来说,就是不想核心逻辑泄露及授权验证被破解两大方面的因素.市面上的混淆加密工具对.NET源码保护的效果天差地别,很多网上下到的混淆工具破解版对. ...
- ANTLR4将JSON翻译成XML
实现功能:构建一个JSON到XML的翻译器. antlr4文件: grammar JSON; json : object | array ; object : '{' pair (',' pair)* ...
- StackTraceElement 源码阅读
StackTraceElement 属性说明 /** * 每个 StackTraceElement 对象代表一个独立的栈帧,所有栈帧的顶部是一个方法调用 * @since 1.4 * @author ...
- NDk的目录
* docs : 开发文档* build: linux下编译的批处理命令* platform : 某种平台下编译需要的头文件和函数库* prebuild : 预编译的工具* sample: 实例代码* ...
- ts-loader如何与vue单文件组件衔接
.ts-loader是如何与vue单文件组件衔接作用的 https://github.com/microsoft/TypeScript-Vue-Starter https://www.npmjs.co ...
- 【汇总】数据库提权(mysql、mssql)
日期:2018-04-03 11:46:45 作者:Bay0net 介绍:利用 mssql 的 sa 账号提权.利用 MySQL 的 UDF 提权 0x01.mssql 提权 恢复 xp_cmdshe ...
- Python re 正则表达式【一】【转】
数量词的贪婪模式与非贪婪模式 正则表达式通常用于在文本中查找匹配的字符串.Python里数量词默认是贪婪的(在少数语言里也可能是默认非贪婪),总是尝试匹配尽可能多的字符:非贪婪的则相反,总是尝试匹配尽 ...
- pyqt5的QCompleter自动补全 使用模板
相关说明 使用QCompleter类,就可以实现自动补全功能,效果图如下: 对应的代码很简单 def init_lineedit(self): # 增加自动补全 self.completer = QC ...
- iOS去除数组中重复的model数据
// 去除数组中model重复 ; i < self.selectedModelArray.count; i++) { ;j < self.selectedModelArray.count ...