经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » JS/JS库/框架 » Vue.js » 查看文章
vue router 组件的高级应用实例代码
来源:jb51  时间:2019/4/8 9:53:54  对本文有异议

1 动态设置页面标题

页面标题是由 <title></title> 来控制的,因为 SPA 只有一个 HTML,所以当切换到不同的页面时,标题是不会发生变化的。必须通过 JavaScript 来修改 <title></title> 中的内容:

window.document.title ='xxx'

有一种思路是在每个页面的 *.vue 的 mounted 钩子函数中,通过 JavaScript 来修改 <title></title> 中的内容。这种方式固然可行,但如果页面很多,就会显著增加维护成本,而且修改逻辑都是一样的。有没有更好的方法呢?

我们可以利用 vue-router 组件的导航钩子 beforeEach 函数,在路由发生变化时,统一设置。

  1. import VueRouter from 'vue-router';
  2. ...
  3.  
  4. //加载 vue-router 插件
  5. Vue.use(VueRouter);
  6.  
  7. /*定义路由匹配表*/
  8. const Routers = [{
  9. path: '/index',
  10. component: (resolve) => require(['./router/views/index.vue'], resolve),
  11. meta: {
  12. title: '首页'
  13. }
  14. },
  15. //一次性加载
  16. // {
  17. // path: '/index',
  18. // component: require('./router/views/index.vue')
  19. // },
  20. {
  21. path: '/about',
  22. component: (resolve) => require(['./router/views/about.vue'], resolve),
  23. meta: {
  24. title: '关于'
  25. }
  26. },
  27. {
  28. path: '/article/:id',
  29. component: (resolve) => require(['./router/views/article.vue'], resolve)
  30. }
  31. ,
  32. {//当访问的页面不存在时,重定向到首页
  33. path: '*',
  34. redirect: '/index'
  35. }
  36. ]
  37. //路由配置
  38. const RouterConfig = {
  39. //使用 HTML5 的 History 路由模式
  40. mode: 'history',
  41. routes: Routers
  42. };
  43. //路由实例
  44. const router = new VueRouter(RouterConfig);
  45. //动态设置页面标题
  46. router.beforeEach((to, from, next) => {
  47. window.document.title = to.meta.title;
  48. next();
  49. })
  50. new Vue({
  51. el: '#app',
  52. router: router,
  53. render: h => h(Hello)
  54. })

我们在路由匹配表中,为那些需要标题的页面,配置了 meta title 属性:

  1. meta: {
  2. title: 'xxx'
  3. }

然后在 beforeEach 导航钩子函数中,从路由对象中获取 meta title 属性,用于标题设置。beforeEach 有三个入参:

参数 说明

参数 说明
to 当前导航,即将要进入的路由对象。
from 当前导航,即将要离开的路由对象。
next 调用 next() 之后,才会进入下一步。

效果:

2 长页面跳转自动返回顶端

假设第一个页面较长,用户滚动查看到底部,这时如果又跳转到另一个页面,那么滚动条是会默认停在上一个页面的所在位置的。这种场景比较好的设计是:跳转后会自动返回顶端。这可以通过 afterEach 钩子函数来实现,代码如下:

  1. router.afterEach((to, from, next) => {
  2. window.scrollTo(0, 0);
  3. });

组合使用 beforeEach 与 afterEach,还可以实现:从一个页面跳转到另一个页面时,出现 Loading 动画,当新页面加载后,再结束动画。

3 登陆验证

某些页面设置了权限,只有账号登陆过,才能访问;否则跳转到登录页。假设我们使用 localStorage 来判断是否登陆。

HTML5 的 localStorage 特性,用于本地存储。它的出现,解决了 cookie 存储空间不足的问题 cookie 中每条 cookie 的存储空间只有 4k) ,而 localStorage 中一般是 5M,这在不同的浏览器中 大小略有不同 。

  1. router.beforeEach((to, from, next) => {
  2. if (window.localStorage.getItem('token')) {
  3. next();
  4. } else {
  5. next('/login');
  6. }
  7. });

next() 入参,如果是 false,会不导航;如果为路径,则会导航到指定路径下的页面。

总结

以上所述是小编给大家介绍的vue router 组件的高级应用实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对w3xue网站的支持!

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号