vue-Router前端路由

1.什么是前端路由

官方网站
https://router.vuejs.org/zh/guide/advanced/navigation-guards.html

1.1路由器

在这里插入图片描述
首先大家知道路由器,路由器是把一个外部的网线(公网ip地址,必须是唯一的,相当于人的身份证号,不然发送消息访问网站不知道去哪里找服务器),然后路由器会建立局域网建立路由表然后分发内网ip(意思是在一个封闭的环境下,使用内网ip做唯一,路由表就是把内网ip地址和电脑进行绑定然后转发)

1.2后端渲染、路由

在这里插入图片描述

后端渲染:
是指前端发送请求-》然后后台服务(java、php、C#)接收到网络请求然后从后端渲染html+Css的界面然后直接返回给前端(jsp、php、lsp)这种方式因为是后台生成的所以对seo和安全性比较好
后端路由:
而哪一个界面对应哪一个界面是由服务器维护的这就是后端路由

1.3前端路由发展阶段

前后端分离

在这里插入图片描述

前端固定好界面使用Html+css+js,然后通过ajax异步去加载网页。
前端负责界面框架(假设是毛坯楼房)后台负责提供各式各样的数据(装修材料、家电家具),ajax技术异步加载(装修工人),然后你的房子就能住人了,你家的门牌号就是你的url网址

SPA单页面富应用

在这里插入图片描述

SPA整个界面只有一个html界面,前端有一个整体的页面框架,然后还有一堆组件也就是模块,当用户触发界面切换事件,前端路由根据地址找到对应的模块请求后台数据渲染界面再加载到指定的位置,就不需要每次点击都要去跳转到另一个界面然后重新请求静态资源然后再去请求数据了。
其实和前后端分离就多了一个url路由功能
路由规则就是一旦url改变则抽取所需的html+css+js进行渲染界面,不刷新界面只是用代码更换界面显示。

2.url栈操作

2.1创建项目

在这里插入图片描述

2.2更改界面url不刷新界面

更改url的hase

在这里插入图片描述

html5的history模式

在这里插入图片描述
在这里插入图片描述

这个是维护了一个栈结构,每次都在压栈让最新的url在最上边
在这里插入图片描述

而替换则是将最上层的url换掉,所以这个不能返回到之前的界面,但可以返回上上次的界面。
在这里插入图片描述

这是三种操作栈的方法

3.安装使用

3.1安装

  • 创建项目的时候选择安装路由
  • 执行命令
npm install vue-router --save

3.2使用

3.2.1vue-router引用

在这里插入图片描述

  • 导入路由对象,并且调用Vue.use(VueRouter)
  • 创建路由实例,并且传入路由映射配置
  • 在vue实例中挂在创建的路由实例

3.2.2vue-router使用

创建路由组件

其实就是index.js,现在会自动生成
现在删除helloWorld组件和相关的引用
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bt4VSPdM-1607937126636)(en-resource://database/1050:1)]

配置路由关系

在这里插入图片描述

在这里注意一下导入导出模块儿和模块名字
在这里插入图片描述

使用路由标签

在这里插入图片描述

默认路径

在这里插入图片描述

url路径带有#号

这样是因为使用的hase模式进行的url改变,如果使用history就不会出现这个问题
在这里插入图片描述

router-link属性配置

  • tag属性
    当前标记被渲染成什么组件
  • replace属性
    如果mode使用的history那么它使用的是pushstate方法,添加该属性是否可以回退上一个界面
  • class router-link-active
    class为router-link-active则是当前界面是哪个界面
    在这里插入图片描述

如果不喜欢这个名称可以修改(不建议修改)
添加active-class属性指定活跃窗口class
在这里插入图片描述

也可以在index.js当中批量配置
在这里插入图片描述

代码控制跳转

在这里插入图片描述

重复跳转异常问题

如果重复跳转相同的界面会产生如下的错误,这时可以自行判断跳转时拒绝跳转到相同的界面
在这里插入图片描述
如果使用的是 this.$router.push或者router-link to,则在router下的index将异常catch住就可以了


const originalPush = Router.prototype.push
Router.prototype.push = function push(location) {
  return originalPush.call(this, location).catch(err => err)
}

在这里插入图片描述
如果使用的是replace方法则需要手动判断
在这里插入图片描述

restful风格的url传值

  • 创建user模块
    在这里插入图片描述
  • 设置路由表在这里插入图片描述
  • 使用user模块
    在这里插入图片描述
  • user接收参数
    在这里插入图片描述

4.路由懒加载

说明

因为如果是一个html界面模块儿化开发,js文件会非常巨大,最好的做法是,当界面显示什么就加载哪些资源这样更高效。
路由懒加载主要是将对应的组件打包成一个个的js代码块然后做到界面显示什么加载什么。

实现方式

在这里插入图片描述

项目打包

在这里插入图片描述

  • app.js:基本就是你实际编写的那个app.vue(.vue或.js?),是界面加载的入口js

  • vendor.js:通过提取公共模块插件来提取的代码块(webpack本身带的模块化代码部分)还包含各种的依赖信息(导入导出),vendor的文件大小最大,因为其包含了vue整一个框架的代码,以及webpack的模块化代码。

  • manifest.js: 被注入了webpackJsonp的定义及异步加载相关的定义(webpack调用CommonsChunkPlugin处理后模块管理的核心,因为是核心,所以要第一个进行加载,不然会报错)一些异步加载的实现方法(通过建立script方式动态引入js),内容上包含异步js的文件名和路径。

5.嵌套路由

  • 创建子组件
    在这里插入图片描述
  • 设置路由
    在这里插入图片描述
  • 在父组件添加引用
    在这里插入图片描述

6.参数传递

参数传递类型

  • params方式
    就是restful风格url传值
  • query方式
    就是带参传值,类似于get方式请求,将参数放在url后边

实现

router-link跳转

为了节省时间我直接使用了userSon模块儿,修改router-link标签
在这里插入图片描述
界面回显数据
在这里插入图片描述

click事件跳转

不使用router-link改为button,绑定点击事件然后使用代码跳转。
在这里插入图片描述

$router和$route

router是全局的路由器,可以获得路由表,跳转记录
route是当前活动的路由,可以获得当前路由的名称参数url

7.导航守卫

作用

监听界面url改变

实现

这里因为可能出现嵌套路由所以保险起见从matched【0】这个位置取值
在这里插入图片描述

在这里插入图片描述

8.keep-alive

keep-alive是vue内置的一个组件,可以使被包含的组件保留状态,或避免重新渲染。
vue-router内置的组件router-view如果被keep-alive包裹,那所有路径匹配到的视图组件会被缓存。
在这里插入图片描述

属性

exclude:“组件名称”
禁止界面缓存支持正则表达式
include:“组件名称”
根据表达式匹配的组件进行缓存
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

I'm the future

希望有幸帮到解决问题

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值