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基础资料整理2
Dec 06 Javascript
JQuery DataTable删除行后的页面更新利用Ajax解决
May 17 Javascript
js实现无需数据库的县级以上联动行政区域下拉控件
Aug 14 Javascript
简单漂亮的js弹窗可自由拖拽且兼容大部分浏览器
Oct 22 Javascript
JS实现超精简的链接列表在固定区域内滚动效果代码
Nov 04 Javascript
jQuery实现鼠标跟随提示层效果代码(可显示文本,Div,Table,Html等)
Apr 18 Javascript
在node.js中怎么屏蔽掉favicon.ico的请求
Mar 01 Javascript
详解Vuejs2.0 如何利用proxyTable实现跨域请求
Aug 03 Javascript
vue中使用props传值的方法
May 08 Javascript
vue element-ui table组件动态生成表头和数据并修改单元格格式 父子组件通信
Aug 15 Javascript
在vue中阻止浏览器后退的实例
Nov 06 Javascript
基于vue-cli3创建libs库的实现方法
Dec 04 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中使用mysqli扩展库对mysql的操作
2013/07/03 PHP
php注册审核重点解析(数据访问)
2017/05/23 PHP
laravel框架 api自定义全局异常处理方法
2019/10/11 PHP
tp5框架前台无限极导航菜单类实现方法分析
2020/03/29 PHP
js 判断一个元素是否在页面中存在
2012/12/27 Javascript
(跨浏览器基础事件/浏览器检测/判断浏览器)经验代码分享
2013/01/24 Javascript
javascript模拟地球旋转效果代码实例
2013/12/02 Javascript
深入理解JavaScript系列(21):S.O.L.I.D五大原则之接口隔离原则ISP详解
2015/03/05 Javascript
JS实现动画兼容性的transition和transform实例分析
2016/12/13 Javascript
如何使用vuejs实现更好的Form validation?
2017/04/07 Javascript
详解Javascript获取缓存和清除缓存API
2017/05/25 Javascript
html中通过JS获取JSON数据并加载的方法
2017/11/30 Javascript
在Vue中使用Compass的方法
2018/03/02 Javascript
angularjs使用div模拟textarea文本框的方法
2018/10/02 Javascript
vue使用Google地图的实现示例代码
2018/12/19 Javascript
vue获取验证码倒计时组件
2019/08/26 Javascript
swiper实现异形轮播效果
2019/11/28 Javascript
从Node.js事件触发器到Vue自定义事件的深入讲解
2020/06/26 Javascript
Vue为什么要谨慎使用$attrs与$listeners
2020/08/27 Javascript
[58:25]VP vs RNG 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
[05:26]TI10典藏宝瓶套装外观展示
2020/07/03 DOTA
python实现rest请求api示例
2014/04/22 Python
Python内置的字符串处理函数详细整理(覆盖日常所用)
2014/08/19 Python
使用beaker让Facebook的Bottle框架支持session功能
2015/04/23 Python
Python中Iterator迭代器的使用杂谈
2016/06/20 Python
Python中进程和线程的区别详解
2017/10/29 Python
Genny意大利官网:意大利高级时装品牌
2020/04/15 全球购物
sleep()方法和wait()方法的区别是什么
2012/11/17 面试题
用JAVA实现一种排序,JAVA类实现序列化的方法(二种)
2014/04/23 面试题
自我评价是什么
2014/01/04 职场文书
《桥》教学反思
2014/04/09 职场文书
学校先进集体事迹材料
2014/05/31 职场文书
授权委托书(公民个人适用)
2014/09/19 职场文书
毕业典礼邀请函
2015/01/31 职场文书
大学三好学生主要事迹范文
2015/11/03 职场文书
NodeJs使用webpack打包项目的方法详解
2022/02/28 NodeJs