Vue3—13—VueRouter

一、路由是什么

使用步骤:
1.配置路由映射表route 2.配置路由对象router,里面包括了route和history模式 3.vue加载插件 4.使用《route-link》标签或编程式路由this.$router.push()
5.配置《router-view》占位

 

路由主要做数据转发的工作;

 

 二、系统路由的三个阶段

1.后端路由后端阶段:每次url改变都要向后端服务器重新请求一次静态资源

 

 

2. 前端路由前端渲染阶段:每次url改变都要向静态资源服务器(前端服务器)重新请求一次静态资源

 

 

 3.前端路由前端渲染阶段(spa阶段):每次url改变不需要向服务器发送静态资源请求了

spa阶段,url发生改变,这个时候通过使用url的hash或者html的history浏览器也将不会去服务器请求资源了即不会实现页面的刷新,前端自己做出了响应切换了页面,并给浏览器渲染;

4.spa阶段是如何实现不向服务器发送资源的?

(4.1)

 

(4.2)

replace是替换,没有回栈的操作

push是压栈,pop是回退可以出栈

阻止默认行为,使用history;

 

 三、路由的默认路径

 

 

 四、路由的懒加载

 

 

 五、vuerouter内全局组件《route-link》的属性

 这个组件内部看来调用的也是编程时路由router.push();

 

 

 六、给route加属性

可以给路由映射表route放上name、meta属性; 

6.2获取route属性的值

然后可以通过this.$route.name取出值,this.$route.meta取出值;

七、动态路由

除了加属性,还可以设置动态路由

动态路由匹配关系:

不将路由映射表写死,根据传过来的url动态决定跳转;

通过router进入到每个sfc后,每个组件实例都可以通过this.$route获取进入本路由映射线对象route,然后通过this.$route.params.在route定义的动态路由名字,可以取出值;

 

 

 7.2获取动态路由的值

 

 

 7.3动态路由之匹配多个参数

 

 

 八、路由嵌套

动态路由和路由嵌套要分清,路由嵌套是子路由,动态路由只不过是url不写死是动态决定的,是不是子路由无所谓;

 

8.2路由嵌套的配置

 

 

 

九、通配路由

 

 

 十、编程式路由(编程式导航)

 

 

 

 10.2路由除了传递url字符字符串,可以传递对象

两种方式都可以传递query,即url的查询字符串

这个query式专业术语,就是url后面的?username=aaa&pwd=12345这种东西;

 

 

十一、组件式路由《routre-link》

编程式路由得到了增强,组件式路由也不甘示弱,得到了增强;

对了,v2的router-link的tag属性被删除了,现在想将router-link渲染成什么完全需要使用插槽的方式,默认是a标签;(所以我们可以猜测router-link组件的源码,里面肯定是一个《slot》《a/》《/slot》)

既然是插槽,那么目前和作用域插槽在一起,可以实现很多功能;

11.2<router-view>也有作用于插槽了

 

 

十二、动态添加路由

就是一开始路由 映射表什么都没有,更别说动态路由、路由嵌套了,什么都没有,就一个空的数组空的路由映射表,

这个时候我们可以使用js动态的添加路由关系;

 

 

 

 

 

十三、路由守卫

每一次路由导航之前,都会调用这个守卫函数router.beforeEach(),所以我们可以在这个函数里做很多判断;

全局路由:

router.beforeEach()、router.afterEach();

路由独享守卫(由表内路由):

routes:【

 {
      path: '/foo',
      component: Foo,
      beforeEnter: (to, from, next) => {
        // ...
      }
    }

const router = new VueRouter(routes)

组件内的守卫

最后,你可以在路由组件内直接定义以下路由导航守卫:

  • beforeRouteEnter
  • beforeRouteUpdate (2.2 新增)
  • beforeRouteLeave
const Foo = {
  template: `...`,
  beforeRouteEnter(to, from, next) {
    // 在渲染该组件的对应路由被 confirm 前调用
    // 不!能!获取组件实例 `this`
    // 因为当守卫执行前,组件实例还没被创建
  },
  beforeRouteUpdate(to, from, next) {
    // 在当前路由改变,但是该组件被复用时调用
    // 举例来说,对于一个带有动态参数的路径 /foo/:id,在 /foo/1 和 /foo/2 之间跳转的时候,
    // 由于会渲染同样的 Foo 组件,因此组件实例会被复用。而这个钩子就会在这个情况下被调用。
    // 可以访问组件实例 `this`
  },
  beforeRouteLeave(to, from, next) {
    // 导航离开该组件的对应路由时调用
    // 可以访问组件实例 `this`
  }
}

 

posted @ 2021-09-25 11:47  Eric-Shen  阅读(396)  评论(0编辑  收藏  举报