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 相关文章推荐
制作高质量的JQuery Plugin 插件的方法
Apr 20 Javascript
js创建对象的几种常用方式小结(推荐)
Oct 24 Javascript
Jquery公告滚动+AJAX后台得到数据
Apr 14 Javascript
Jquery 的outerHeight方法使用介绍
Sep 11 Javascript
原生javascript实现Tab选项卡切换功能
Jan 12 Javascript
javascript的replace方法结合正则使用实例总结
Jun 16 Javascript
jQuery简单入门示例之用户校验demo示例
Jul 09 Javascript
node版本管理工具n包使用教程详解
Nov 09 Javascript
详解Express笔记之动态渲染HTML(新手入坑)
Dec 13 Javascript
elementUi vue el-radio 监听选中变化的实例代码
Jun 28 Javascript
用 js 写一个 js 解释器过程详解
Aug 02 Javascript
Bootstrap简单实用的表单验证插件BootstrapValidator用法实例详解
Mar 29 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读取目录下所有文件的代码
2008/01/07 PHP
PHP中Date获取时间不正确怎么办
2008/06/05 PHP
web站点获取用户IP的安全方法 HTTP_X_FORWARDED_FOR检验
2013/06/01 PHP
CodeIgniter框架提示Disallowed Key Characters的解决办法
2014/04/21 PHP
深入浅析用PHP实现MVC
2016/03/02 PHP
PhpStorm本地断点调试的方法步骤
2018/05/21 PHP
jquery下异步提交表单 异步跨域提交表单
2010/11/17 Javascript
jquery封装的对话框简单实现
2013/07/21 Javascript
jquery判断RadioButtonList和RadioButton中是否有选中项示例
2013/09/29 Javascript
js时间比较示例分享(日期比较)
2014/03/05 Javascript
JavaScript中的typeof操作符用法实例
2014/04/05 Javascript
Jquery使用val方法读写value值
2015/05/18 Javascript
JavaScript修改作用域外变量的方法
2016/03/25 Javascript
jQuery Ajax 上传文件处理方式介绍(推荐)
2016/06/30 Javascript
JS遍历对象属性的方法示例
2017/01/10 Javascript
详谈jQuery unbind 删除绑定事件 / 移除标签方法
2017/03/02 Javascript
微信小程序网络层封装的实现(promise, 登录锁)
2019/05/08 Javascript
JS实现点击下拉列表文本框中出现对应的网址,点击跳转按钮实现跳转
2019/11/25 Javascript
JS实现导航栏楼层特效
2020/01/01 Javascript
[02:03]DOTA2亚洲邀请赛 HGT战队出场宣传片
2015/02/07 DOTA
整理Python最基本的操作字典的方法
2015/04/24 Python
Python3使用requests包抓取并保存网页源码的方法
2016/03/15 Python
Queue 实现生产者消费者模型(实例讲解)
2017/11/13 Python
浅析Python数据处理
2018/05/02 Python
python提取图像的名字*.jpg到txt文本的方法
2018/05/10 Python
详解Appium+Python之生成html测试报告
2019/01/04 Python
pandas 层次化索引的实现方法
2019/07/06 Python
numpy中的meshgrid函数的使用
2019/07/31 Python
Python 一键获取百度网盘提取码的方法
2019/08/01 Python
selenium与xpath之获取指定位置的元素的实现
2021/01/26 Python
美国领先的户外服装与装备用品店:Moosejaw
2016/08/25 全球购物
介绍下WebSphere的安全性
2013/01/31 面试题
营销总经理的岗位职责
2013/12/15 职场文书
体现团队精神的口号
2014/06/06 职场文书
导游词之西安大清真寺
2019/12/17 职场文书
如何用Navicat操作MySQL
2021/05/12 MySQL