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: , / ...
随机推荐
- selenium_java
等待 页面全加载 ChromeOptions options=new ChromeOptions(); /** *(1) NONE: 当html下载完成之后,不等待解析完成,selenium会直接返回 ...
- GitHub:Tencent
ylbtech-GitHub:Tencent 1.返回顶部 1. https://opensource.tencent.com/ 2. 2.返回顶部 3.返回顶部 4.返回顶部 5.返回顶 ...
- JspFragment.invoke方法
JspFragment.invoke方法可以说是JspFragment最重要的方法,利用这个方法可以控制是否执行和输出标签体的内容.是否迭代执行标签体的内容或对标签体的执行结果进行修改后再输出. 例如 ...
- WebView的用法
基本用法 布局文件配置WebView <WebView android:id="@+id/wv_news_detail" android:layout_width=" ...
- java.lang.Double[] 转 double[]
Double[] v = list.stream().map(item -> item.getRespTime()).toArray(Double[]::new); Mean mean = ne ...
- This application's application-identifier entitlement does not match that of the installed application. These values must match for an upgrade to be allowed.
真机运行测试的时候Xcode会报这样的错误: 原因: 你的手机上已经安装了此项目. 解决办法: 把你以前安装的卸掉, 或者把这个项目的 bunldID 改了,再次运行即可.
- docker 的安装和镜像
一.docker的 安装 : 第一种: yum -y install docker systemctl start docker.service systemctl status docker 第二种 ...
- WinRar制作安装包
这次研究了下WinRar制作程序安装包,我使用的是5.21版本. 选中要打包的文件,先压缩为RAR文件,然后双击打开文件 输入目录时可以选择前两项,输入绝对路径时,则为第三项. 配置解压前运行的解压后 ...
- 微信小程序页面阻止默认滑动事件
在页面上要加入一个悬浮的按钮,这个按钮需要可以拖动,在元素中使用catchtouchstart,catchtouchmove,catchtouchend来控制悬浮按钮的拖动,但是在ios系统中,微信小 ...
- pthon基础知识(索引、切片、序列相加、乘法、检查元素是否是序列成员、计算序列长度、最大最小值)
序列 数据存储方式 数据结构 python 列表.元组.字典.集合.字符串 序列: 一块用于存放多个值的连续内存空间,并且按一定顺序排列,可以通过索引取值 索引(编号): 索引可以是负数 从左到 ...