怎样使用vue做出单页应用前端路由

这次给大家带来怎样使用vue做出单页应用前端路由,使用vue做出单页应用前端路由的注意事项有哪些,下面就是实战案例,一起来看一下。

写在前面:通常 SPA 中前端路由有2种实现方式:

window.history

location.hash

下面就来介绍下这两种方式具体怎么实现的

一.history

1.history基本介绍

window.history 对象包含浏览器的历史,window.history 对象在编写时可不使用 window 这个前缀。history是实现SPA前端路由是一种主流方法,它有几个原始方法:

history.back() – 与在浏览器点击后退按钮相同

history.forward() – 与在浏览器中点击按钮向前相同

history.go(n) – 接受一个整数作为参数,移动到该整数指定的页面,比如go(1)相当于forward(),go(-1)相当于back(),go(0)相当于刷新当前页面

如果移动的位置超出了访问历史的边界,以上三个方法并不报错,而是静默失败

在HTML5,history对象提出了 pushState() 方法和 replaceState() 方法,这两个方法可以用来向历史栈中添加数据,就好像 url 变化了一样(过去只有 url 变化历史栈才会变化),这样就可以很好的模拟浏览历史和前进后退了,现在的前端路由也是基于这个原理实现的。

2.history.pushState

pushState(stateObj, title, url) 方法向历史栈中写入数据,其第一个参数是要写入的数据对象(不大于640kB),第二个参数是页面的 title, 第三个参数是 url (相对路径)。

stateObj :一个与指定网址相关的状态对象,popstate事件触发时,该对象会传入回调函数。如果不需要这个对象,此处可以填null。

title:新页面的标题,但是所有浏览器目前都忽略这个值,因此这里可以填null。

url:新的网址,必须与当前页面处在同一个域。浏览器的地址栏将显示这个网址。

关于pushState,有几个值得注意的地方:

pushState方法不会触发页面刷新,只是导致history对象发生变化,地址栏会有反应,只有当触发前进后退等事件(back()和forward()等)时浏览器才会刷新

这里的 url 是受到同源策略限制的,防止恶意脚本模仿其他网站 url 用来欺骗用户,所以当违背同源策略时将会报错

3.history.replaceState

replaceState(stateObj, title, url) 和pushState的区别就在于它不是写入而是替换修改浏览历史中当前纪录,其余和 pushState一模一样

4.popstate事件

定义:每当同一个文档的浏览历史(即history对象)出现变化时,就会触发popstate事件。

注意:仅仅调用pushState方法或replaceState方法 ,并不会触发该事件,只有用户点击浏览器倒退按钮和前进按钮,或者使用JavaScript调用back、forward、go方法时才会触发。另外,该事件只针对同一个文档,如果浏览历史的切换,导致加载不同的文档,该事件也不会触发。

用法:使用的时候,可以为popstate事件指定回调函数。这个回调函数的参数是一个event事件对象,它的state属性指向pushState和replaceState方法为当前URL所提供的状态对象(即这两个方法的第一个参数)。

5.history实现spa前端路由代码

a.htmlb.html // 注册路由  document.querySelectorAll('.api').forEach(item => {   item.addEventListener('click', e => {    e.preventDefault();    let link = item.textContent;    if (!!(window.history && history.pushState)) {     // 支持History API     window.history.pushState({name: 'api'}, link, link);    } else {     // 不支持,可使用一些Polyfill库来实现    }   }, false)  });  // 监听路由  window.addEventListener('popstate', e => {   console.log({    location: location.href,    state: e.state   })  }, false)

登录后复制

popstate监听函数里打印的e.state便是history.pushState()里传入的第一个参数,在这里即为{name: ‘api’}

二.Hash

1.Hash基本介绍

url 中可以带有一个 hash http://localhost:9000/#/a.html

window 对象中有一个事件是 onhashchange,以下几种情况都会触发这个事件:

直接更改浏览器地址,在最后面增加或改变#hash;

通过改变location.href或location.hash的值;

通过触发点击带锚点的链接;

浏览器前进后退可能导致hash的变化,前提是两个网页地址中的hash值不同。

2.Hash实现spa前端路由代码

  // 注册路由  document.querySelectorAll('.api').forEach(item => {   item.addEventListener('click', e => {    e.preventDefault();    let link = item.textContent;    location.hash = link;   }, false)  });  // 监听路由  window.addEventListener('hashchange', e => {   console.log({    location: location.href,    hash: location.hash   })  }, false)

登录后复制

相信看了本文案例你已经掌握了方法,更多精彩请关注【创想鸟】其它相关文章!

推荐阅读:

vue.js怎样部署nginx案例(附代码)

vue.js怎样部署nginx案例(附代码)

以上就是怎样使用vue做出单页应用前端路由的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/3185587.html

(0)
上一篇 2025年3月31日 22:30:24
下一篇 2025年3月31日 22:30:37

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • vue cli+webapck4需要哪些步奏

    这次给大家带来vue cli+webapck4需要哪些步奏,vue cli+webapck4的注意事项有哪些,下面就是实战案例,一起来看一下。 webpack4 released 已经有一段时间了,插件系统趋于平稳,适逢对webpack3的…

    编程技术 2025年3月31日
    100
  • 在项目中如何使用Vue filter

    这次给大家带来在项目中如何使用Vue filter,在项目中使用Vue filter的注意事项有哪些,下面就是实战案例,一起来看一下。 Vue filter介绍及其使用 VueJs 提供了强大的过滤器API,能够对数据进行各种过滤处理,返回…

    2025年3月31日 编程技术
    100
  • Vue项目内应用第三方验证码

    这次给大家带来Vue项目内应用第三方验证码,的注意事项有哪些,下面就是实战案例,一起来看一下。 什么是腾讯验证码?它长这个样子……:point_down:   最近公司项目要求引入腾讯云验证,要求是这样的: 为了防止别人恶意刷短信验证码,当…

    2025年3月31日 编程技术
    100
  • 优化vue-router懒加载

    这次给大家带来优化vue-router懒加载,的注意事项有哪些,下面就是实战案例,一起来看一下。 用过vue-router都知道它可以实现模块js的懒加载,即只有当需要时才去加载对应模块的js脚本文件,以加速主页的显示。比如只有第一次用户点…

    编程技术 2025年3月31日
    100
  • 如何在项目中使用vue+slot插口

    这次给大家带来如何在项目中使用vue+slot插口,在项目中使用vue+slot插口的注意事项有哪些,下面就是实战案例,一起来看一下。 子组件 <!—-> {{item.text}} export default{ data…

    2025年3月31日 编程技术
    100
  • 在vue中如何修改a标签样式?

    这篇文章主要介绍了vue 动态修改a标签的样式的方法,现在分享给大家,也给大家做个参考。 公司要做一个类似今日头条的项目,用前后端分离的方式做成HTML5页面,先在微信中运行,领导说想看看效果怎么样。今日头条头部的导航是可以滚动和添加类别的…

    2025年3月31日
    100
  • 实战项目中使用Vue内slots/scoped slots

    这次给大家带来实战项目中使用Vue内slots/scoped slots,实战项目中使用Vue内slots/scoped slots的注意事项有哪些,下面就是实战案例,一起来看一下。 一直对Vue中的slot插槽比较感兴趣,下面是自己的一些…

    编程技术 2025年3月31日
    100
  • 使用vue-meta如何管理头部标签

    这篇文章主要介绍了详解vue-meta如何让你更优雅的管理头部标签,现在分享给大家,也给大家做个参考。 在 Vue SPA 应用中,如果想要修改HTML的头部标签,或许,你会在代码里,直接这么做: // 改下titledocument.ti…

    2025年3月31日
    100
  • FileReader API的使用

    这次给大家带来FileReader API的使用,FileReader API使用的注意事项有哪些,下面就是实战案例,一起来看一下。 有时候我们需要从文件中读取数据。在以前,你需要将其发送到服务器,然后返回所需的数据。问题是,现在我们还可以…

    2025年3月31日 编程技术
    100
  • 在vue-scroller中如何标记记录滚动位置

    本篇文章主要介绍了vue-scroller记录滚动位置的示例代码,现在分享给大家,也给大家做个参考。 问题描述: 列表页进入详情页,或者tab页切换,然后再返回列表页,希望能切换到之前滚动位置 解决问题思路: 切换到其他页面前记录位置,返回…

    编程技术 2025年3月31日
    100

发表回复

登录后才能评论