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 中调用 javascript 打开 Excel 表
Dec 21 Javascript
cookie在javascript中的使用技巧以及隐私在服务器端的设置
Dec 03 Javascript
Javascript基础知识(二)事件
Sep 29 Javascript
jQuery和AngularJS的区别浅析
Jan 29 Javascript
jquery插件splitScren实现页面分屏切换模板特效
Jun 16 Javascript
浅谈JSON.parse()和JSON.stringify()
Jul 14 Javascript
JS使用parseInt解析数字实现求和的方法
Aug 05 Javascript
Bootstrap 3的box-sizing样式导致UEditor控件的图片无法正常缩放的解决方案
Sep 15 Javascript
canvas实现钟表效果
Feb 13 Javascript
使用ES6语法重构React代码详解
May 09 Javascript
js实现input密码框显示/隐藏功能
Sep 10 Javascript
详解Vue 数据更新了但页面没有更新的 7 种情况汇总及延伸总结
May 28 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
东方红 - 来复式再生机的修复
2021/03/02 无线电
FleaPHP的安全设置方法
2008/09/15 PHP
让ThinkPHP支持大小写url地址访问的方法
2014/10/31 PHP
php基于dom实现的图书xml格式数据示例
2017/02/03 PHP
laravel框架路由分组,中间件,命名空间,子域名,路由前缀实例分析
2020/02/18 PHP
RR vs IO BO3 第二场2.13
2021/03/10 DOTA
理解Javascript_07_理解instanceof实现原理
2010/10/15 Javascript
ajax更新数据后,jquery、jq失效问题
2011/03/16 Javascript
Javascript实现的类似Google的Div拖动效果代码
2011/08/09 Javascript
javascript中的delete使用详解
2013/04/11 Javascript
JQuery中的事件及动画用法实例
2015/01/26 Javascript
JavaScript函数的调用以及参数传递
2015/10/21 Javascript
JavaScript资源预加载组件和滑屏组件的使用推荐
2016/03/10 Javascript
利用BootStrap的Carousel.js实现轮播图动画效果
2016/12/21 Javascript
jQuery中table数据的值拷贝和拆分
2017/03/19 Javascript
es6系列教程_ Map详解以及常用api介绍
2017/09/25 Javascript
node.js基于fs模块对系统文件及目录进行读写操作的方法详解
2017/11/10 Javascript
Nuxt.js实战详解
2018/01/18 Javascript
JS运动特效之任意值添加运动的方法分析
2018/01/24 Javascript
Vue filter格式化时间戳时间成标准日期格式的方法
2018/09/16 Javascript
微信运维交互机器人的示例代码
2018/11/12 Javascript
es6数值的扩展方法
2019/03/11 Javascript
灵活使用console让js调试更简单的方法步骤
2019/04/23 Javascript
详解如何搭建mpvue框架搭配vant组件库的小程序项目
2019/05/16 Javascript
js 计算月/周的第一天和最后一天代码
2020/02/01 Javascript
Javascript文本框脚本实现方法解析
2020/10/30 Javascript
python hashlib加密实现代码
2019/10/17 Python
Python中pyecharts安装及安装失败的解决方法
2020/02/18 Python
python deque模块简单使用代码实例
2020/03/12 Python
Python之字符串的遍历的4种方式
2020/12/08 Python
css3利用transform变形结合事件完成扇形导航
2020/10/26 HTML / CSS
以实惠的价格轻松租车,免费取消:Easyrentcars
2019/07/16 全球购物
专科生就业求职信
2014/06/22 职场文书
2014年超市员工工作总结
2014/11/18 职场文书
二胎满月酒致辞
2015/07/29 职场文书
nginx日志格式分析和修改
2022/04/28 Servers