最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • vue-router原理

    正文概述 掘金(黄典)   2020-12-26   538

    vue-router有几种模式?

    三种模式,"hash" | "history" | "abstract",其中浏览器环境默认为hash,Node.js 环境默认为abstract

    • hash: 使用 URL hash 值来作路由。支持所有浏览器,包括不支持 HTML5 History Api 的浏览器。
    • history: 依赖 HTML5 History API 和服务器配置。查看 HTML5 History 模式。
    • abstract: 支持所有 JavaScript 运行环境,如 Node.js 服务器端。如果发现没有浏览器的 API,路由会自动强制进入这个模式。

    基本原理

    $router的push和replace是手动调用内部路径切换方法transitionTo,go、back、forward方法实际调用的是window.history.go(),以及浏览器的前进后退会触发相应的监听事件,然后调用transitionTo,之后更新路由,触发<router-view> 的重新渲染。

    • hash模式是优先监听popstate事件,不行就降级为hashchange事件,history模式监听popstate事件;
    • history.pushState()和history.replaceState()修改浏览器历史栈后url改变但不会刷新页面,不会触发popstate事件;
    • window.location.hash = '#/b'修改hash不会刷新页面,会触发hashchange事件,hash的改变会自动添加到浏览器历史记录中;

    执行流程

    1. 点击 router-link或执行$router.push()
    2. 调用this.history.push,不同模式下该函数的实现略有不同,以下以hash模式为例,
    3. 先执行 this.transitionTo 做路径切换,在切换完成的回调函数中,执行 pushHash 函数;
      • pushHash 优先用pushState ,不行就降级为window.location.hash = path
      • pushState 会调用浏览器原生的 history 的 pushState 接口或者 replaceState 接口,更新浏览器的 url 地址,并把当前 url 压入历史栈中。
    4. updateRoute ,更新 this.apps 保存的组件实例的 _route 值
    5. 重新渲染组件
      • 通过Vue.mixin()方法,全局注册一个混合,影响注册之后所有创建的每个Vue实例,该混合在beforeCreate钩子中通过Vue.util.defineReactive()定义了响应式的_route属性。所谓响应式属性,即当_route值改变时,会自动调用Vue实例的render()方法,更新视图。

    vue-router原理

    参考

    • Vue Router官网
    • vue-router原理剖析
    • Vue-Router源码解析-ustbhuangyi

    起源地下载网 » vue-router原理

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元