关于路由和vue-router的原理概述

155 阅读2分钟

路由可以分为两类: 前端路由和前端路由

后端路由: 后端路由一般是指我们的表单提交之后,后端帮我们进行路由跳转(强调的是后端跳转)。

前端路由分三种:

1.hash路由:内部是采用hashchange去监听。
带有#号比较丑,而且后端拿不到#后的路径,不利于seo,渲染出来的页面只有跟标签
好处就是可以进行锚点跳转,也不需要后端。

2.history路由:内部采用了popstate的方法去监听,
不好的地方这种路由需要后端配合,去做相应的页面映射,否则会404
好的地方是这种路由第一次渲染一定是可以去拿到页面标签内容的,有利于seo,后续的就不一定

3.asbtrct路由:是node环境内依赖vue和自身维护的一个路由栈。
这种用的比较少不展开说

具体vue里面怎么实现:
    第一点:首先在使用上,去调用Vue.use()传入vueRouter 这一步就说明vueRouter内部实现了一个install方法.
    第二点:new Vue()会把VueRouter作为示例传入,然后在组件中能够通过 this.$router去调用
           这个功能的话,由于newVue传入了VueRouter实例然后 再内部minxin的混入机制,在beforeCreated的一个生命周期会去判断,如果是跟实例的话就能直接获取的VueRouter实例,如果是子组件,他就会去拿父组件的VueRouter然后存起来,最后就做了个代理将vue.protorype.$router上面,然后去访问的vue实例,使所有的vue组件都能访问vue.prototype
    第三点:我们 new VueRouter()一般会传入用户自定义的一个树状路由routes 以及mode,内部做了如下处理:
            1.对传入的自定义routes做了一个扁平化处理(遍历所有的父节点然后放入一个内部的映射表中,然后递归遍历chidren属性放入映射表中)
            2.mode根据模式new 两个类:以hash为例子,内部监听了hashchange事件,当路由发生变化的时候他就会拿到当前的hash路径然后去匹配我们路由映射表的路径,将匹配到的所有组件拿到,然后按照嵌套的顺序一次渲染到router-view组件当中。
            3.同时将当前的hash路由定义为了响应式,保证当路由切换的时候能够去重新调用routerview中的渲染函数,去更新视图。