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实现上传图片前的预览(TX的面试题)
Aug 14 Javascript
jQuery 源码分析笔记(5) jQuery.support
Jun 19 Javascript
JS判断非空至少输入两个字符的简单实现方法
Jun 23 Javascript
基于jQuery解决ios10以上版本缩放问题
Nov 03 jQuery
详解nuxt sass全局变量(公共scss解决方案)
Jun 27 Javascript
JS基于ES6新特性async await进行异步处理操作示例
Feb 02 Javascript
解决mui框架中switch开关通过js控制开或者关状态时小圆点不动的问题
Sep 03 Javascript
js实现select下拉框选择
Jan 11 Javascript
vue 解决无法对未定义的值,空值或基元值设置反应属性报错问题
Jul 31 Javascript
基于JS实现快速读取TXT文件
Aug 25 Javascript
JavaScript canvas实现文字时钟
Jan 10 Javascript
详解js创建对象的几种方式和对象方法
Mar 01 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与已存在的Java应用程序集成
2006/10/09 PHP
PHP3 safe_mode 失效漏洞
2006/10/09 PHP
深入eAccelerator与memcached的区别详解
2013/06/06 PHP
php通过rmdir删除目录的简单用法
2015/03/18 PHP
详解PHP中array_rand函数的使用方法
2016/09/11 PHP
PHP编程计算两个时间段是否有交集的实现方法(不算边界重叠)
2017/05/30 PHP
PHP实现mysqli批量执行多条语句的方法示例
2017/07/22 PHP
TP5框架使用QueryList采集框架爬小说操作示例
2020/03/26 PHP
JQuery 浮动导航栏实现代码
2009/08/27 Javascript
jquery.simple.tree插件 更简单,兼容性更好的无限树插件
2010/09/03 Javascript
基于Jquery的回车成tab焦点切换效果代码(Enter To Tab )
2010/11/14 Javascript
JS判断数组中是否有重复值得三种实用方法
2013/08/16 Javascript
js代码实现的加入收藏效果并兼容主流浏览器
2014/06/23 Javascript
javascript实现动态加载CSS
2015/01/26 Javascript
jQuery实现的简单百分比进度条效果示例
2016/08/01 Javascript
jquery 中toggle的2种用法详解(推荐)
2016/09/02 Javascript
Vue常用指令详解分析
2018/08/19 Javascript
原生JavaScript实现的无缝滚动功能详解
2020/01/17 Javascript
Python中的字符串替换操作示例
2016/06/27 Python
python抖音表白程序源代码
2019/04/07 Python
用Python调用win命令行提高工作效率的实例
2019/08/14 Python
解决tensorflow训练时内存持续增加并占满的问题
2020/01/19 Python
用python读取xlsx文件
2020/12/17 Python
YSL圣罗兰美妆官方旗舰店:购买YSL口红
2018/04/16 全球购物
Keds加拿大官网:购买帆布运动鞋和皮鞋
2019/09/26 全球购物
Java里面有没有全局变量?为什么?
2015/02/06 面试题
银行员工职业规划范文
2014/01/21 职场文书
高中数学教学反思
2014/01/30 职场文书
安全施工责任书
2014/08/25 职场文书
大学生党员个人对照检查材料范文
2014/09/25 职场文书
会计专业求职信范文
2015/03/19 职场文书
升职自荐信范文
2015/03/27 职场文书
起诉状范本
2015/05/20 职场文书
离婚律师函范本
2015/05/27 职场文书
公司开业的祝贺语大全(60条)
2019/07/05 职场文书
python 中yaml文件用法大全
2021/07/04 Python