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 相关文章推荐
IE 条件注释详解总结(附实例代码)
Aug 29 Javascript
浅谈JavaScript中null和undefined
Jul 09 Javascript
如何实现JavaScript动态加载CSS和JS文件
Dec 28 Javascript
最棒的Angular2表格控件
Aug 10 Javascript
AngularJS表单验证功能分析
May 26 Javascript
Vue组件通信实践记录(推荐)
Aug 15 Javascript
vue 实现左右拖拽元素并且不超过他的父元素的宽度
Nov 30 Javascript
JS学习笔记之闭包小案例分析
May 29 Javascript
node.js实现上传文件功能
Jul 15 Javascript
使用 webpack 插件自动生成 vue 路由文件的方法
Aug 20 Javascript
JS 实现发送短信验证码的“59秒后重新发送验证短信”功能
Aug 23 Javascript
vue 内联样式style中的background用法说明
Aug 05 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
经典的星际争霸,满是回忆的BGM
2020/04/09 星际争霸
PHP概述.
2006/10/09 PHP
php定义数组和使用示例(php数组的定义方法)
2014/03/29 PHP
php实例分享之通过递归实现删除目录下的所有文件详解
2014/05/15 PHP
PHP四种基本排序算法示例
2015/04/09 PHP
PHP身份证校验码计算方法
2016/08/10 PHP
PHP+Apache环境中如何隐藏Apache版本
2017/11/24 PHP
YII2框架中日志的配置与使用方法实例分析
2020/03/18 PHP
DOMAssitant最新版 DOMAssistant 2.5发布
2007/12/25 Javascript
IE8 中使用加速器(Activities)
2010/05/14 Javascript
jQuery控制iFrame(实例代码)
2013/11/19 Javascript
document.forms用法示例介绍
2014/06/26 Javascript
利用a标签自动解析URL分析网址实例
2014/10/20 Javascript
node.js中的fs.truncateSync方法使用说明
2014/12/15 Javascript
javascript实现依次输入input自动定焦
2014/12/23 Javascript
JavaScript使用Math.Min返回两个数中较小数的方法
2015/04/06 Javascript
js精美的幻灯片画集特效代码分享
2015/08/29 Javascript
浅谈javascript运算符——条件,逗号,赋值,()和void运算符
2016/07/15 Javascript
JavaScript中return用法示例
2016/11/29 Javascript
JS实现简单的点赞与踩功能示例
2018/12/05 Javascript
Python3基础之条件与循环控制实例解析
2014/08/13 Python
python获取文件真实链接的方法,针对于302返回码
2018/05/14 Python
Python subprocess模块功能与常见用法实例详解
2018/06/28 Python
详解Django的CSRF认证实现
2018/10/09 Python
Python调用adb命令实现对多台设备同时进行reboot的方法
2018/10/15 Python
python中将zip压缩包转为gz.tar的方法
2018/10/18 Python
Python获取当前脚本文件夹(Script)的绝对路径方法代码
2019/08/27 Python
python 实现将小图片放到另一个较大的白色或黑色背景图片中
2019/12/12 Python
Selenium关闭INFO:CONSOLE提示的解决
2020/12/07 Python
CSS3实现圆角、阴影、透明效果并兼容各大浏览器
2014/08/08 HTML / CSS
SEPHORA丝芙兰捷克官网:购买香水、化妆品和护肤品
2018/11/26 全球购物
财务出纳员岗位职责
2013/11/26 职场文书
小学教师师德演讲稿
2014/05/06 职场文书
儿童诗两首教学反思
2016/02/23 职场文书
机关单位2016年法制宣传日活动总结
2016/04/01 职场文书
react中的DOM操作实现
2021/06/30 Javascript