vue router 组件的高级应用实例代码


Posted in Javascript onApril 08, 2019

1 动态设置页面标题

页面标题是由 <title></title> 来控制的,因为 SPA 只有一个 HTML,所以当切换到不同的页面时,标题是不会发生变化的。必须通过 JavaScript 来修改 <title></title> 中的内容:

window.document.title ='xxx'

有一种思路是在每个页面的 *.vue 的 mounted 钩子函数中,通过 JavaScript 来修改 <title></title> 中的内容。这种方式固然可行,但如果页面很多,就会显著增加维护成本,而且修改逻辑都是一样的。有没有更好的方法呢?

我们可以利用 vue-router 组件的导航钩子 beforeEach 函数,在路由发生变化时,统一设置。

import VueRouter from 'vue-router';
...

//加载 vue-router 插件
Vue.use(VueRouter);

/*定义路由匹配表*/
const Routers = [{
 path: '/index',
 component: (resolve) => require(['./router/views/index.vue'], resolve),
 meta: {
  title: '首页'
 }
},
 //一次性加载
 // {
 //  path: '/index',
 //  component: require('./router/views/index.vue')
 // },
 {
  path: '/about',
  component: (resolve) => require(['./router/views/about.vue'], resolve),
  meta: {
   title: '关于'
  }
 },
 {
  path: '/article/:id',
  component: (resolve) => require(['./router/views/article.vue'], resolve)
 }
 ,
 {//当访问的页面不存在时,重定向到首页
  path: '*',
  redirect: '/index'
 }
]
//路由配置
const RouterConfig = {
 //使用 HTML5 的 History 路由模式
 mode: 'history',
 routes: Routers
};
//路由实例
const router = new VueRouter(RouterConfig);
//动态设置页面标题
router.beforeEach((to, from, next) => {
 window.document.title = to.meta.title;
 next();
})
new Vue({
 el: '#app',
 router: router,
 render: h => h(Hello)
})

我们在路由匹配表中,为那些需要标题的页面,配置了 meta title 属性:

meta: {
  title: 'xxx'
}

然后在 beforeEach 导航钩子函数中,从路由对象中获取 meta title 属性,用于标题设置。beforeEach 有三个入参:

参数 说明

参数 说明
to 当前导航,即将要进入的路由对象。
from 当前导航,即将要离开的路由对象。
next 调用 next() 之后,才会进入下一步。

效果:

vue router 组件的高级应用实例代码

2 长页面跳转自动返回顶端

假设第一个页面较长,用户滚动查看到底部,这时如果又跳转到另一个页面,那么滚动条是会默认停在上一个页面的所在位置的。这种场景比较好的设计是:跳转后会自动返回顶端。这可以通过 afterEach 钩子函数来实现,代码如下:

router.afterEach((to, from, next) => {
 window.scrollTo(0, 0);
});

组合使用 beforeEach 与 afterEach,还可以实现:从一个页面跳转到另一个页面时,出现 Loading 动画,当新页面加载后,再结束动画。

3 登陆验证

某些页面设置了权限,只有账号登陆过,才能访问;否则跳转到登录页。假设我们使用 localStorage 来判断是否登陆。

HTML5 的 localStorage 特性,用于本地存储。它的出现,解决了 cookie 存储空间不足的问题 cookie 中每条 cookie 的存储空间只有 4k) ,而 localStorage 中一般是 5M,这在不同的浏览器中 大小略有不同 。

router.beforeEach((to, from, next) => {
 if (window.localStorage.getItem('token')) {
  next();
 } else {
  next('/login');
 }
});

next() 入参,如果是 false,会不导航;如果为路径,则会导航到指定路径下的页面。

总结

以上所述是小编给大家介绍的vue router 组件的高级应用实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
js动画效果制件让图片组成动画代码分享
Jan 14 Javascript
Javascript玩转继承(二)
May 08 Javascript
JQuery中attr方法和removeAttr方法用法实例
May 18 Javascript
修改js confirm alert 提示框文字的简单实例
Jun 10 Javascript
Javascript中构造函数要注意的一些坑
Jan 23 Javascript
微信小程序 常用工具类详解及实例
Feb 15 Javascript
微信小程序之页面跳转和参数传递的实现
Sep 29 Javascript
arcgis for js栅格图层叠加(Raster Layer)问题
Nov 22 Javascript
VueAwesomeSwiper在VUE中的使用以及遇到的一些问题
Jan 11 Javascript
jquery+ajaxform+springboot控件实现数据更新功能
Jan 22 jQuery
详解vue3.0 diff算法的使用(超详细)
Jul 01 Javascript
关于JavaScript轮播图的实现
Nov 20 Javascript
JavaScript中的一些实用小技巧总结
Apr 07 #Javascript
详解vue 不同环境配置不同的打包命令
Apr 07 #Javascript
JavaScript数组去重的几种方法
Apr 07 #Javascript
vue表单验证你真的会了吗?vue表单验证(form)validate
Apr 07 #Javascript
js中Generator函数的深入讲解
Apr 07 #Javascript
巧妙运用v-model实现父子组件传值的方法示例
Apr 07 #Javascript
vue路由导航守卫和请求拦截以及基于node的token认证的方法
Apr 07 #Javascript
You might like
DOTA2 玩家自创拉野攻略 特色英雄快速成长篇
2020/04/20 DOTA
php 论坛采集程序 模拟登陆,抓取页面 实现代码
2009/07/09 PHP
php中执行系统命令的方法
2015/03/21 PHP
php中请求url的五种方法总结
2017/07/13 PHP
利用PHP获取汉字首字母并且分组排序详解
2017/10/22 PHP
Yii2语言国际化自动配置详解
2018/08/22 PHP
csdn 博客的css样式 v3
2009/02/24 Javascript
javascript 面向对象编程基础:继承
2009/08/21 Javascript
javascript下对于事件、事件流、事件触发的顺序随便说说
2010/07/17 Javascript
Fastest way to build an HTML string(拼装html字符串的最快方法)
2011/08/20 Javascript
js验证是否为数字的总结
2013/04/14 Javascript
jquery通过a标签删除table中的一行的代码
2013/12/02 Javascript
在javascript中执行任意html代码的方法示例解读
2013/12/25 Javascript
window.location.href的用法(动态输出跳转)
2014/08/09 Javascript
JavaScript中最简洁的编码html字符串的方法
2014/10/11 Javascript
jQuery实现的个性化返回底部与返回顶部特效代码
2015/10/30 Javascript
探索angularjs+requirejs全面实现按需加载的套路
2016/02/26 Javascript
JS条形码(一维码)插件JsBarcode用法详解【编码类型、参数、属性】
2017/04/19 Javascript
JavaScript Math对象和调试程序的方法分析
2019/05/13 Javascript
小程序组件之自定义顶部导航实例
2019/06/12 Javascript
layui实现三级导航菜单
2019/07/26 Javascript
小程序跨页面交互的作用与方法详解
2020/01/07 Javascript
Vue js with语句原理及用法解析
2020/09/03 Javascript
[05:13]TI4 中国战队 机场出征!!
2014/07/07 DOTA
[01:00:30]完美世界DOTA2联赛循环赛 Inki vs Matador BO2第二场 10.31
2020/11/02 DOTA
使用Python编写简单网络爬虫抓取视频下载资源
2014/11/04 Python
Tornado Web Server框架编写简易Python服务器
2018/07/28 Python
python判断无向图环是否存在的示例
2019/11/22 Python
python定义类的简单用法
2020/07/24 Python
学生实习推荐信范文
2013/11/26 职场文书
新闻学专业职业生涯规划范文:我的人生我做主
2014/09/12 职场文书
2014年最新离婚协议书范本
2014/10/11 职场文书
民间借贷被告代理词
2015/05/23 职场文书
心理学培训心得体会
2016/01/22 职场文书
Netty客户端接入流程NioSocketChannel创建解析
2022/03/25 Java/Android
WinServer2012搭建DNS服务器的方法步骤
2022/06/10 Servers