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 function、指针及内置对象
Feb 19 Javascript
jquery实现动态操作select选中
Feb 11 Javascript
设置点击文本框或图片弹出日历控件的实现代码
May 12 Javascript
分享一个插件实现水珠自动下落效果
Jun 01 Javascript
Angular使用$http.jsonp发送跨站请求的方法
Mar 16 Javascript
设置cookie指定时间失效(实例代码)
May 28 Javascript
浅谈Vue2.0中v-for迭代语法的变化(key、index)
Mar 06 Javascript
vue 属性拦截实现双向绑定的实例代码
Oct 24 Javascript
JavaScript禁用右键单击优缺点分析
Jan 20 Javascript
茶余饭后聊聊Vue3.0响应式数据那些事儿
Oct 30 Javascript
vue 实现超长文本截取,悬浮框提示
Jul 29 Javascript
vue中echarts的用法及与elementui-select的协同绑定操作
Nov 17 Vue.js
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
火车采集器 免费版使出收费版本功能实现原理
2009/09/17 PHP
php数据库配置文件一般做法分享
2012/07/07 PHP
浅谈PHP中的面向对象OOP中的魔术方法
2017/06/12 PHP
Sample script that displays all of the users in a given SQL Server DB
2007/06/16 Javascript
为jquery.ui.dialog 增加“自动记住关闭时的位置”的功能
2009/11/24 Javascript
jquery中ajax学习笔记4
2011/10/16 Javascript
JS中setInterval、setTimeout不能传递带参数的函数的解决方案
2013/04/28 Javascript
JS实现一键回顶功能示例代码
2013/10/28 Javascript
给ListBox添加双击事件示例代码
2013/12/02 Javascript
javascript文件加载管理简单实现方法
2015/07/25 Javascript
jQuery实现Email邮箱地址自动补全功能代码
2015/11/03 Javascript
简要了解jQuery移动web开发的响应式布局设计
2015/12/04 Javascript
jquery实现提示语淡入效果
2017/05/05 jQuery
JS监控关闭浏览器操作的实例详解
2017/09/12 Javascript
使用npm安装最新版本nodejs
2018/01/18 NodeJs
详解React项目的服务端渲染改造(koa2+webpack3.11)
2018/03/19 Javascript
Angular resolve基础用法详解
2018/10/03 Javascript
小程序如何构建骨架屏
2019/05/29 Javascript
深入学习js函数的隐式参数 arguments 和 this
2019/06/24 Javascript
vue实现数据控制视图的原理解析
2020/01/07 Javascript
详细分析vue响应式原理
2020/06/22 Javascript
[01:09:16]DOTA2-DPC中国联赛 正赛 SAG vs Dynasty BO3 第一场 1月25日
2021/03/11 DOTA
[47:45]DOTA2-DPC中国联赛 正赛 Phoenix vs Dragon BO3 第一场 2月26日
2021/03/11 DOTA
fastcgi文件读取漏洞之python扫描脚本
2017/04/23 Python
python机器学习实战之最近邻kNN分类器
2017/12/20 Python
python的Crypto模块实现AES加密实例代码
2018/01/22 Python
Python使用matplotlib绘制多个图形单独显示的方法示例
2018/03/14 Python
python flask搭建web应用教程
2019/11/19 Python
降低python版本的操作方法
2020/09/11 Python
Python如何执行系统命令
2020/09/23 Python
Python3中的tuple函数知识点讲解
2021/01/03 Python
HTML5高仿微信聊天、微信聊天表情|对话框|编辑器功能
2018/04/23 HTML / CSS
医学检验专业大学生求职信
2013/11/18 职场文书
2015年学雷锋活动总结
2015/02/06 职场文书
留学推荐信英文范文
2015/03/26 职场文书
MySQL解决Navicat设置默认字符串时的报错问题
2022/06/16 MySQL