vue2路由学习

80 阅读4分钟

image.png

*路由的对应关系:Hahs地址和组件之间的对应关系(其实就是一个路由的规则)不同的hash会展示不同页面

#/ 斜杠前面带#的为hash地址

注意:在hash地址中,/ 是用来分割路径片段的,/ 后面的参数项,叫做“路径参数”。

在路由“参数对象(route)”中,需要使用this.route)”中,需要使用this.route.params来访问路径参数。

注意2:在hash地址中,?后面的参数项,叫做“查询参数”。

在路由“参数对象”中,需要使用this.$route.query来访问查询参数。

注意3:在this.$route 中,path只是路径部分,fullPath是完整的地址。

例如:fullPath: "/artisticWorks/Movie/2?name=zs%20age%3D11" 是fullPath 的值。

path: "/artisticWorks/Movie/2" 是path的值。

image.png

image.png

image.png

点击了页面的路由链接,然后前端路由监听到点击的链接,找到匹配上的path,然后把之前的组件给替换,在页面上展示path 对应的组件

image.png

Vue-router 的基本用法

image.png

image.png

安装vue-router包* 在vue2的项目中,安装vue-router的命令如下:

Npm i vue-router@3.5.2 -S

创建路由模块*

image.png

s rc/ router/index.js就是路由模块*

导入并挂载路由模块*

创建完路由模块后要在main.js中进行挂载*

image.png

声明路由链接和占位符*

先放三个链接,然后放占位符

image.png

找到路由模块,声明三条对应关系(路由规则)*

image.png Vue-router的常见用法*

路由重定向

image.png

嵌套路由****

image.png

通过children属性声明子路由规则****

image.png

需要注意父级的hash地址,父级hash地址要完整,后面才能加上子级组件的hash地址,不然找不到****

image.png 默认子路由

image.png

image.png 动态路由匹配****

image.png 动态路由的概念****

image.png

动态路由测试 在vue-route中的path添加冒号 : 会自动给它赋值一个id

image.png

组件中,hash地址赋值的是1

image.png 根据测试:点击了喜羊羊,路由会给他赋值一个id,可以在$route.params中看到它的参数

image.png

动态路由-为路由开启props传参****

传参的方式确实比较方便

image.png

image.png

动态路由-拓展query和fullPath

注意:在hash地址中,/是用来分割路径片段的,/后面的参数项,叫做“路径参数”。

在路由“参数对象(route)”中,需要使用this.route)”中,需要使用this.route.params来访问路径参数。

  注意2:在hash地址中,?后面的参数项,叫做“查询参数”。

在路由“参数对象”中,需要使用this.$route.query来访问查询参数。  

注意3:在this.$route 中,path只是路径部分,fullPath是完整的地址。

例如:fullPath: "/artisticWorks/Movie/2?name=zs%20age%3D11" 是fullPath 的值。

path: "/artisticWorks/Movie/2" 是path的值,只包含斜线部分的值,不好含后面的查询参数。

image.png

浏览器中的数据结构

image.png image.png

重要知识-导航****

编程式导航跳转 - push、replace、go

声明式导航 和 编程式导航****

image.png

Vue-router中的编程式导航API*

常用的三个

image.png

image.png

$route.go 的简化用法*

在行内使用编程式导航跳转的时候,this必须要省略,否则会报错!

image.png

导航守卫(路由守卫)

防止一些以外情况发生

查看时检查是否登录,未登录将强制跳转到登录页

image.png

如何声明这样的一个导航守卫

image.png image.png

New的一个构造函数得到一个实例对象,当拿到router以后就可以定义这个 全局前置守卫

调用beforeEach(fn) 这个语法就是声明全局前置守卫的语法格式

beforeEach :每次路由发生导航之前都会触发这个fn回调函数

守卫方法的3个形参

image.png

这三个单独这么写有点看不懂?

假设A跳转到C

To是C,指向的是去哪个位置

From则是A,是要离开这个A路由的信息对象

Next是函数next(),A跳转C之前会触发这个(fn)回调函数,在回调函数中调用next()函数,则表示允许这次路由导航

Next函数的3种调用方式 权限****

image.png

// 分析:

    // 1. 要拿到用户将要访问的hash地址

    // 2. 判断 hash地址是否等于 /Main。

    // 2.1 如果等于 /main,证明需要登录之后,才能访问成功

    // 2.2 如果不等于 /main,则不需要登录。直接放行 next()

    // 3. 如果访问的地址是 /main,则需要读取loaclStorage中的token值

    // 3.2如果没有token,则强制跳转到 /login登录页

image.png LoaclStorage:

image.png

image.png

手写个假的token 这样就可以登录了

对于这个token,一般是前端生成一个然后post传给后端的(如果我没记错的话)


拓展:锚链接(hashmap)可以在当前页面中上下前往

锚链接简单写法,点击#b1就根据id跳转到#b1的位置

image.png

image.png

通过location.xxx 可以拿到一些信息

再拓展 如何控制页面的权限

路径可以存在数组中,然后只要判断到to.path在数组里面存在,就证明它是一个有权限的页面。 通关indexOf()查找 如果pahtArr数组里面 .indexOf(to.path) 不等于 -1 就证明to.path在数组里边,在的话就证明to.path是一个有权限的页面

image.png

或者是通过封装来导入这些hash地址

image.png

image.png

image.png