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 相关文章推荐
javascript 在网页中的运用(asp.net)
Nov 23 Javascript
JavaScript 获取当前时间戳的代码
Aug 05 Javascript
文字溢出实现溢出的部分再放入一个新生成的div中具体代码
May 17 Javascript
JS实现两个大数(整数)相乘
Apr 28 Javascript
js实现有时间限制消失的图片方法
Feb 27 Javascript
AngularJs 60分钟入门基础教程
Apr 03 Javascript
详解vue.js 开发环境搭建最简单攻略
Jun 12 Javascript
JavaScript实现跟随滚动缓冲运动广告框
Jul 15 Javascript
JS代码实现电脑配置检测功能
Mar 21 Javascript
uploadify插件实现多个图片上传并预览
Sep 30 Javascript
JavaScript 链表定义与使用方法示例
Apr 28 Javascript
js利用iframe实现选项卡效果
Aug 09 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
PHP MYSQL乱码问题,使用SET NAMES utf8校正
2009/11/30 PHP
PHP模板引擎smarty详细介绍
2015/05/26 PHP
PHP实现根据图片色界在不同位置加水印的方法
2015/08/08 PHP
用javascript实现的支持lrc歌词的播放器
2007/05/17 Javascript
子页向父页传值示例
2013/11/27 Javascript
JavaScript面向对象编程入门教程
2014/04/16 Javascript
JavaScript中模拟实现jsonp
2015/06/19 Javascript
javascript实现判断鼠标的状态
2015/07/10 Javascript
七个不允许错过的jQuery小技巧
2015/12/21 Javascript
全面解析Angular中$Apply()及$Digest()的区别
2016/08/04 Javascript
AngularJS删除路由中的#符号的方法
2016/09/20 Javascript
Angualrjs和bootstrap相结合实现数据表格table
2017/03/30 Javascript
Vue 滚动行为的具体使用方法
2017/09/13 Javascript
使用Vue做一个简单的todo应用的三种方式的示例代码
2018/10/20 Javascript
微信小程序之事件交互操作实例分析
2018/12/03 Javascript
js实现固定区域内的不重叠随机圆
2019/10/24 Javascript
Python中的choice()方法使用详解
2015/05/15 Python
python实现支持目录FTP上传下载文件的方法
2015/06/03 Python
Python实现列表删除重复元素的三种常用方法分析
2017/11/24 Python
python字典值排序并取出前n个key值的方法
2018/10/17 Python
Python实现连接MySql数据库及增删改查操作详解
2019/04/16 Python
python cumsum函数的具体使用
2019/07/29 Python
PyTorch的SoftMax交叉熵损失和梯度用法
2020/01/15 Python
Python进程Multiprocessing模块原理解析
2020/02/28 Python
使用tensorflow框架在Colab上跑通猫狗识别代码
2020/04/26 Python
如何基于pandas读取csv后合并两个股票
2020/09/25 Python
如何通过python实现IOU计算代码实例
2020/11/02 Python
巧克力领导品牌瑞士莲美国官网:Lindt Chocolate美国
2016/08/25 全球购物
货代行业个人求职简历的自我评价
2013/10/22 职场文书
电子专业推荐信范文
2013/11/18 职场文书
《海伦?凯勒》教学反思
2014/04/17 职场文书
合伙协议书范本
2014/04/21 职场文书
合作与交流自我评价
2015/03/09 职场文书
帝企鹅日记观后感
2015/06/10 职场文书
2015年第31个教师节致辞
2015/07/31 职场文书
世界上超棒的8种逻辑思维
2019/08/06 职场文书