Vue-router使用(配置路径、路由跳转、相关API、多级路由、路由守卫,两种工作模式)

Vue-router使用(配置路径、路由跳转、相关API、多级路由、路由守卫,两种工作模式)

目录

  • Vue-router使用(配置路径、路由跳转、相关API、多级路由、路由守卫,两种工作模式)
    • 安装
    • 配置路径
    • 路由跳转
      • 不携带参数跳转
      • 携带参数跳转
        • ?形式携带参数
        • 地址中直接携带参数
    • 相关API
    • 多级路由
    • 路由守卫
    • 两种工作模式
      • hash
      • history
      • 配置

安装

cnpm install -S vue-router

配置路径

创建文件:src/router/index.js

// index.js
import VueRouter from 'vue-router' // 导入router
import LoginView from '@/views/Login.vue' // 导入组件Vue.use(VueRouter) // 使用插件// 创建路由
const routes = [{path: '/login',	// 组件路径name: 'login',	// 组件名component: LoginView	// 组件实例},
]// 创建router实例 以及设置配置
const router = new VueRouter({mode: 'history', // 路由模式 history不带#,hash带#base: process.env.BASE_URL, // 基础url为BASH_URLroutes // 引入routes变量存放路由信息
})

main.js 中使用

// main.js
import router from './router' // 引入new Vue({router, // 装载routerstore,render: h => h(App)
}).$mount('#app')

路由跳转

路由跳转参数根据组件配置的路由而定:

image-20240506161423915

不携带参数跳转

// js跳转
this.$router.push('/login')	// 根据路径
this.$router.push('login')	// 根据组件名
// 对象写法
this.$router.push({name:'login'})
this.$router.push({path:'/login'})// html跳转
<router-link to="/login"><button>跳转到login</button>
</router-link>
<router-link to="login"><button>跳转到login</button>
</router-link>
// 对象写法
<router-link :to="{name:'login'}"><button>跳转到login</button>
</router-link>
<router-link :to="{path:'/login'}"><button>跳转到login</button>
</router-link>

携带参数跳转

?形式携带参数
// js跳转
this.$router.push('/login?id=3') // 根据路径
// 对象写法
this.$router.push({path:'/home',query:{'id':'3'}})// html跳转
<router-link to="/home?id=3"><button>跳转到home</button>
</router-link>
// 对象写法
<router-link :to="{name:'home',query:{'id':'3'}}"><button>跳转到home</button>
</router-link>
地址中直接携带参数
// 在路由配置中添加:id,id可以是任何参数
const routes = [{path: '/home/:id',name: 'home',component: HomeView},
]
// js跳转
this.$router.push('/home/3') // 根据路径
// 对象写法
this.$router.push({name:'home',params:{'id':'3'}})// html跳转
<router-link to="/home/3"><button>跳转到home</button>
</router-link>
// 对象写法
<router-link :to="{name:'home',params:{'id':'3'}}"><button>跳转到home</button>
</router-link>

相关API

  • this.$router.push(path): 相当于点击路由链接(可以返回到当前路由界面)
  • this.$router.replace(path): 用新路由替换当前路由(不可以返回到当前路由界面)
  • this.$router.back(): 请求(返回)上一个记录路由
  • this.$router.go(-1): 请求(返回)上一个记录路由
  • this.$router.go(1): 请求下一个记录路由

多级路由

需求:在同一个html页面中,左边有两个跳转链接负责切换组件,右边展示不同的组件,仅以切换路由为示例

// 子组件1
<script>
export default {name:'sun1'
}
</script><template>
<div>我是sun1
</div>
</template>// 子组件2
<script>
export default {name:'sun1'
}
</script><template>
<div>我是sun2
</div>
</template>
<script>
export default {name: 'Index',
}
</script><template><div>// 切换组件<div class="left"><router-link to="/index/sun1"><p>子路由1</p></router-link><router-link to="/index/sun2"><p>子路由2</p></router-link></div>// 展示区<div class="right"><router-view></router-view></div></div>
</template>
// 注册路由
import Index from '@/components/index.vue'
import sun1 from '@/components/sun1.vue'
import sun2 from '@/components/sun2.vue'const routes = [{path: '/index',name: 'index',component: Index,children:[{path:'sun1',component:sun1},{path:'sun2',component:sun2}]
},]

image-20240506191955106

image-20240506192010054

路由守卫

路由守卫会在用户访问某个路由之前提前进行判断检查和各种操作,确保用户已符合规定的方式访问路由

  1. 全局前置守卫 beforeEach:在路由导航前执行,用于权限验证、登录状态检查等
  2. 全局解析守卫 beforeResolve:在导航被确认之前,解析组件时被调用
  3. 全局后置守卫 afterEach:在路由导航后执行,用于页面访问记录、页面埋点等
  4. 路由独享守卫:在单个路由配置中定义的守卫,仅对该路由生效
  5. 组件内守卫:在组件内部定义的守卫,用于监视组件的生命周期和路由变化

全局前置守卫示例:

// src/router/index.js
router.beforeEach((to,from,next)=>{console.log('我是前置路由',to,from)if (localStorage.getItem('name')) { //判断是否需要鉴权next()} else {alert('未查询到token,无权查看')}
})

此时访问路由不会返回任何东西,并触发函数

image-20240506192925689

当添加token后便能正常访问

image-20240506192902532

两种工作模式

hash

  • 优势
    • 兼容性好:支持所有浏览器
    • 配置简单:无需服务器额外配置,只需前端配置模式
    • 易于部署:可以直接部署在任何HTTP服务器上
  • 劣势
    • URL不美观:所有URL中都会带有#符号
    • SEO不友好:不利于网站内容被搜索引擎收录

history

  • 优势
    • URL美观:URL中不带#符号
    • 历史记录管理:可以通过浏览器的 history API 进行前进后退等操作
    • SEO友好:更符合搜索引擎优化的要求
  • 劣势
    • 服务器端配置:需要服务器进行额外配置,确保在不同路由下都返回同一个HTLM,以避免出现404错误
    • 部署复杂性:相比于hash模式,需要额外部署配置,以避免出现404错误

配置

src/router/index.js

// Vue2默认history模式
const router = new VueRouter({mode: 'hash',base: process.env.BASE_URL,routes
})

浏览器输入:http://localhost:8080/#/home/其他与history基本没有区别

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/671140.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【LeetCode 121】买卖股票的最佳时机

思路 思路&#xff1a; 所谓代码的复杂性来源于业务的复杂性&#xff0c;如果能够想清楚业务实现逻辑&#xff0c;就能够轻松写出代码&#xff1b; 假设当前是第i天&#xff0c;如何在第i天赚到最多的钱&#xff1f;需要在第i天之前以最低价买入股票&#xff1b; 所以需要求…

Python学习笔记------处理数据和生成折线图

给定数据&#xff1a; jsonp_1629344292311_69436({"status":0,"msg":"success","data":[{"name":"美国","trend":{"updateDate":["2.22","2.23","2.24",&qu…

使用Docker安装Jenkins

大家好&#xff0c;今天给大家分享如何使用docker安装jenkins&#xff0c;关于docker的安装和常用命令可以参考下面两篇文章&#xff0c;使用docker可以提高资源利用率&#xff0c;能够在不同的环境中轻松迁移和部署应用&#xff0c;在本文中就不过多赘述了。 Docker常用命令 …

六淳科技IPO终止背后:十分着急上市,大额分红,实控人买豪宅

华西证券被暂停保荐业务资格6个月的影响力逐渐显现。 近日&#xff0c;深圳证券交易所披露的信息显示&#xff0c;东莞六淳智能科技股份有限公司&#xff08;下称“六淳科技”&#xff09;及其保荐人撤回上市申请材料。因此&#xff0c;深圳证券交易所决定终止对其首次公开发行…

【Unity 组件思想-预制体】

【Unity 组件思想-预制体】 预制体&#xff08;Prefab&#xff09;是Unity中一种特殊的组件 特点和用途&#xff1a; 重用性&#xff1a; 预制体允许开发者创建可重复使用的自定义游戏对象。这意味着你可以创建一个预制体&#xff0c;然后在场景中多次实例化它&#xff0c;…

[Unity常见小问题]打包ios后无法修改模型透明度

问题 在Editor下可以使用如下代码去修改模型的材质的透明度&#xff0c;但是打包ios后无法对透明度进行修改且没有任何warning和error using System.Collections; using System.Collections.Generic; using UnityEngine;public class NewBehaviourScript : MonoBehaviour {[R…

光检测器——光纤通信学习笔记七

光检测器 光检测器的基本介绍 作用&#xff1a;把接受到的光信号转换成电信号 光接收器的灵敏度、光源的发光功率和光纤的损耗三者决定了光纤通信的传输距离&#xff1b; 光电二极管 光电转换的基本原理 之前提到&#xff0c;PN结由于内部载流子的扩散运动形成了内部电场&…

leetcode-岛屿数量-99

题目要求 思路 1.使用广度优先遍历&#xff0c;将数组中所有为1的元素遍历一遍&#xff0c;遍历过程中使用递归&#xff0c;讲该元素的上下左右四个方向的元素值也置为0 2.统计一共执行过多少次&#xff0c;次数就是岛屿数量 代码实现 class Solution { public:int solve(vec…

项目管理-项目采购管理2/2

项目管理&#xff1a;每天进步一点点~ 活到老&#xff0c;学到老 ヾ(◍∇◍)&#xff89;&#xff9e; 何时学习都不晚&#xff0c;加油 本文承接 项目采购管理第二部分&#xff0c;详细讲解项目合同管理。 项目采购管理过程--重点&#xff1a; ①ITTO 输入&#xff0c;输出…

初识C语言——第十三天

关键字2&#xff1a; static 修饰局部变量&#xff0c;改变了局部变量的生命周期&#xff08;本质上是改变了变量的存储类型&#xff09; static修饰全局变量&#xff0c;使得这个全局变量只能在自己所在的源文件&#xff08;.c)内部可以使用&#xff0c;其他源文件不能使用 …

python安装问题及解决办法(pip不是内部或外部命令也不是可运行)

pip是python的包管理工具&#xff0c;使python可在cmd&#xff08;命令行窗口&#xff0c;WinR后输入cmd&#xff09;中执行 针对 “pip不是内部或外部命令也不是可运行” 问题&#xff0c;需要在安装的时候将python添加到环境变量中 上图第三个选项必须勾选才能在cmd中使用pi…

使用 Postman 实现 API 自动化测试

背景介绍 相信大部分开发人员和测试人员对 postman 都十分熟悉&#xff0c;对于开发人员和测试人员而言&#xff0c;使用 postman 来编写和保存测试用例会是一种比较方便和熟悉的方式。但 postman 本身是一个图形化软件&#xff0c;相对较难或较麻烦&#xff08;如使用 RPA&am…