前端路由中vue-router的路由变更原理

vue-router可以通过两种模式进行前端路由,哈希模式:

  location.hash='/abc',location.replace('#/def')

  哈希模式哈希值变化可以通过onhashchange监听到,从而渲染响应组件

history模式:

  hostory.pushState(stateObj,'title 1','/abc'),history.replaceState(stateObj,'title 2','/def')

  history模式可以通过对原生pushState和replaceState方法进行封装,主动发出事件实现监听

var _wr = function(type) {
var orig = history[type];
return function() {
var e = new Event(type);
e.arguments = arguments;
window.dispatchEvent(e);
// 注意事件监听在url变更方法调用之前 也就是在事件监听的回调函数中获取的页面链接为跳转前的链接
var rv = orig.apply(this, arguments);
return rv;
};
};
history.pushState = _wr('pushState');
history.replaceState = _wr('replaceState');
window.addEventListener('pushState', function(e) {
var path = e && e.arguments.length > 2 && e.arguments[2];
var url = /^http/.test(path) ? path : (location.protocol + '//' + location.host + path);
console.log('old:'+location.href,'new:'+url);
});
window.addEventListener('replaceState', function(e) {
var path = e && e.arguments.length > 2 && e.arguments[2];
var url = /^http/.test(path) ? path : (location.protocol + '//' + location.host + path);
console.log('old:'+location.href,'new:'+url);
});

js实现通过window监听pushState和replaceState的更多相关文章

  1. 移动端用js与jquery实时监听输入框值的改动

    背景: 在一次移动端H5开发中,需要监听输入框值的实时变动. onchange事件肯定抛弃,因为只能失去焦点才触发. 而keyPress在Android可以触发,iOS不可以. 又不想用Android ...

  2. js与jquery实时监听输入框值变化方法

    本文实例讲述了js与jquery实时监听输入框值的oninput与onpropertychange方法.分享给大家供大家参考.具体如下: 最近做过一个项目,需求是下拉框里自动匹配关键字,具体细节是实时 ...

  3. js与jquery实时监听输入框值的oninput与onpropertychange方法

    文实例讲述了js与jquery实时监听输入框值的oninput与onpropertychange方法.分享给大家供大家参考.具体如下: 最近做过一个项目,需求是下拉框里自动匹配关键字,具体细节是实时监 ...

  4. gulp压缩html,css,js文件流程、监听任务、使用gulp创建服务器、同时运行多个任务、反向代理

    一.初始化 首先先做一个项目初始化,用来记录你项目中用到的工具 再你项目文件下打开一个控制台,输入命令 yarn init -y 进行初始化 输入命令yarn add gulp -g  --- 全局安 ...

  5. [No00006A]Js的addEventListener()及attachEvent()区别分析【js中的事件监听】

    1.添加时间监听: Chrom中: addEventListener的使用方式: target.addEventListener(type, listener, useCapture); target ...

  6. JS基础(二)事件监听练习之table鼠标悬停行变色

    JS监听事件简单学习: [object].addEvent("事件类型","处理函数","冒泡事件或捕获事件");   [object].r ...

  7. js 移动端之监听软键盘弹出收起

    js 移动端关于页面布局,如果底部有position:fixed的盒子,又有input,当软键盘弹出收起都会影响页面布局.这时候Android可以监听resize事件,代码如下,而ios没有相关事件. ...

  8. js移动端回退监听 popstate

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  9. 从零开始学习Node.js例子五 服务器监听

    httpsnifferInvoke.js var http = require('http'); var sniffer = require('./httpsniffer'); var server ...

  10. js - 预加载+监听图片资源加载制作进度条

    这两天遇到一个新需求:一个一镜到底的h5动画.因为功能的特殊性,就要求我们提前监听页面的静态图片是否全部加载完毕.即处理预加载. 总结下来,下次这种需求需要提前注意以下几点: 一.图片而不是背景图 本 ...

随机推荐

  1. Wordpress 添加图片点击放大效果

    在 header.php 添加以下代码 <!-- 图片放大 --> <link rel="stylesheet" href="https://cdn.j ...

  2. centos系统的linux环境不同用户,环境变量不同如何配置?

    说明: 在 CentOS(或任何 Linux 系统)中,不同用户拥有独立的环境变量 是系统设计的正常行为.每个用户可以通过各自的配置文件来定义自己的 PATH.JAVA_HOME.LANG 等环境变量 ...

  3. C#/.NET/.NET Core优秀项目和框架2025年8月简报

    前言 公众号每月定期推广和分享的C#/.NET/.NET Core优秀项目和框架(每周至少会推荐两个优秀的项目和框架当然节假日除外),公众号推文中有项目和框架的详细介绍.功能特点.使用方式以及部分功能 ...

  4. 张量链式法则(下篇):揭秘Transpose、Summation等复杂算子反向传播,彻底掌握深度学习求导精髓!

    本文首发于本人的微信公众号,链接:https://mp.weixin.qq.com/s/eEDo6WF0oJtRvLYTeUYxYg 摘要 本文紧接系列的上篇,介绍了 transpose,summat ...

  5. Halcon 应用仿射变换

    应用仿射变换 affine_trans_image 作用​:将任意仿射变换矩阵(如刚性.缩放.错切)作用到图像(Image)上,生成变换后的新图像. 算子签名:affine_trans_image( ...

  6. 为什么说 Edge/Serverless 是最适合独立开发者的开发方式?

    前言 说 edge 似乎很多人以为是浏览器,其实这里的 Edge 指的是 边缘计算,再加上 Serverless,对独立开发者来说,这是一个值得重点关注的技术趋势. 记得几年前我在一次内部分享演讲上介 ...

  7. linux系统编程01-文件系统

    目录 介绍 一.目录和文件 1. 获取文件的属性 : stat 2.文件属性 3.umask 4.文件权限管理 5.粘住位 6.文件系统:FAT.UFS 7.硬链接,符号链接 9. 文件目录解析 : ...

  8. AI“速”不可挡,算力巨变,你准备好了吗?

    「 "当某一天人工智能的智慧超越人类,你会发现人工智能将会以迅雷不及掩耳之势改变世界,那个改变是不可逆的,极其迅速." 」 浪潮信息董事长彭震在"IPF2024" ...

  9. PHP 开发者必须掌握的基本 Linux 命令

    PHP 开发者必须掌握的基本 Linux 命令 刚开始 PHP 开发时,我并没有特别的理由选择 Linux.既不是出于对开源软件的热情,也不是认为 Linux 比 macOS 或 Windows 更优 ...

  10. Sonar代码扫描,你会使用吗?

    1.前言 在项目上线之前一般都会进行安全审查及漏洞扫描,而Sonar qube就是一款市面上使用较为广泛的代码审查工具,经过Sonar scanner代码审查后把出现在代码里的问题都暴露出来并进行分类 ...