Vue3---router(安装、路由跳转、路由守卫、本地存储)

Vue3—router(安装、路由跳转、路由守卫、本地存储)

目录

  • Vue3---router(安装、路由跳转、路由守卫、本地存储)
    • 基础使用
      • 安装
      • 创建路由
    • 路由跳转
      • 无参跳转
        • js写法
        • html写法
      • 有参跳转
        • query
        • params
    • 路由守卫
    • 额外:本地存储
      • sessionStorage
      • localStorage
      • cookie
        • 基础用法
        • 示例

基础使用

安装

npm install vue-router@4

创建路由

src/router/index.js,没有则新建

import {createRouter, createWebHistory, createWebHashHistory} from "vue-router";// 引入自定义的组件
import HelloWorld from "../components/HelloWorld.vue";
import Aboutview from "../views/AboutView.vue";const routes = [{path: '/', name: 'home', component: HelloWorld},{path: '/about', name: 'about', component: Aboutview},
]const router = createRouter({routes,history:createWebHistory()
})export default router
  • createWebHistory:History模式创建路由
  • createWebHashHistory:Hash模式创建路由
// main.js
import { createApp } from 'vue'
import './style.css'
import App from './App.vue'
import router from "./router/index.js";createApp(App).use(router).mount('#app')
  • createApp(App).use(router).mount('#app')是链式调用写法

路由跳转

无参跳转

js写法
<template><div class="card"><router-link to="/about"><button>点我跳转到About组件</button></router-link></div>
</template>
html写法
<script setup>
import {useRouter} from "vue-router";
const router = useRouter()function toAbout() {router.push('/about')
}</script><template><div class="card"><button @click="toAbout">点我跳转到About组件</button></div>
</template>

有参跳转

query
  • 有参跳转的to需要在前面加上:,这样才能被vue识别为对象
<script setup>
import {useRouter} from "vue-router";
const router = useRouter()function toAbout() {router.push({name:'about',query:{id:1}})
}</script><template><div class="card">// js写法<button @click="toAbout">点我跳转到About组件</button>// html写法<router-link :to="{name:'about',query:{id:1}}"><button>我也能跳转About组件</button></router-link></div>
</template>

其他路由取出参数

  • 注意这里导入的是useRoute不是useRouter
// about.vue
<script setup>
import {useRoute} from "vue-router";const router = useRoute()
const id = router.query.id
</script><template>
<h1>{{ id }}</h1>
</template>
params
// src/router/index.js
import {createRouter, createWebHistory} from "vue-router";import Aboutview from "../views/AboutView.vue";const routes = [// 在参数前面加上':'{path: '/about/:id', name: 'about', component: Aboutview},
]const router = createRouter({routes,history:createWebHistory()
})export default router
<script setup>
import {useRouter} from "vue-router";
const router = useRouter()function toAbout() {router.push({name:'about',params:{id:1}})
}</script><template><div class="card">// js写法<button @click="toAbout">点我跳转到About组件</button>// html写法<router-link :to="{name:'about',params:{id:1}}"><button>我也能跳转About组件</button></router-link></div>
</template>

两者在浏览器url中的区别:

  • queryhttp://localhost:5173/about?id=1
  • paramshttp://localhost:5173/about/1

路由守卫

简单示例:

// src/router/index.js
import {createRouter, createWebHistory} from "vue-router";const routes = [...]
const router = createRouter({...})// 上面是注册路由的代码
router.beforeEach((to, from) => {// 当访问路由时没有携带token会直接alert 全局生效if (!localStorage.getItem('token')){alert('没有携带token')}
})
export default router
  • 此时访问任意路由都会弹出警告

image-20240508152213673

  • 携带token后便能正常访问

image-20240508152303687

额外:本地存储

sessionStorage

// 添加
sessionStorage.setItem('name', '张三')
// 获取
sessionStorage.getItem('name')
// 删除
sessionStorage.removeItem('name')
// 清除全部
sessionStorage.clear()

localStorage

// 添加
localStorage.setItem('name', '张三')
// 获取
localStorage.getItem('name')
// 删除
localStorage.removeItem('name')
// 清除全部
localStorage.clear()

cookie

使用cookie需要安装:

npm install vue-cookies
基础用法

注册

// main.js
import { createApp } from 'vue'
import App from './App.vue'
import VueCookies from 'vue-cookies';createApp(App).use(VueCookies).mount('#app')

增删查

<script setup>
import {inject} from "vue";const $cookies = inject('$cookies')// 添加
$cookies.set("name", '陈五','1h')
// 查询
$cookies.get("name", '陈五','1h')
// 删除
$cookies.remove("name", '陈五','1h')

inject 用于在子组件中从父组件或根组件中注入已经创建的实例,如果不想使用也可以直接引入 VueCookies实例

<script setup>
import VueCookies from "vue-cookies";const $cookies = VueCookies
// 添加
$cookies.set("name", '陈五','1h')
</script>
示例

main.js引入VueCookies并use

// main.js
import { createApp } from 'vue'
import './style.css'
import App from './App.vue'
import router from "./router/index.js";
import VueCookies from 'vue-cookies';createApp(App).use(VueCookies).use(router).mount('#app')

存入cookie并跳转到about组件

<script setup>
import {useRouter} from "vue-router";
import {inject} from "vue";
import VueCookies from "vue-cookies";const router = useRouter()
const $cookies = inject('$cookies');function setToken() {// 添加$cookies.set("name", '陈五','1h')router.push('about')
}
</script><template><div class="card"><button @click="setToken">点我跳转到About组件</button></div>
</template>

取出cookie并渲染到模版

<script setup>
import VueCookies from 'vue-cookies'
import {inject} from "vue";const $cookies = inject('$cookies');
const name = $cookies.get('name')</script><template>
<h1>{{ name }}</h1>
</template>
card"><button @click="setToken">点我跳转到About组件</button></div>
</template>

取出cookie并渲染到模版

<script setup>
import VueCookies from 'vue-cookies'
import {inject} from "vue";const $cookies = inject('$cookies');
const name = $cookies.get('name')</script><template>
<h1>{{ name }}</h1>
</template>

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

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

相关文章

shell_结束进程脚本

结束进程的shell脚本如下&#xff1a; #!/bin/bash# kill all process ps aux|grep "local" | grep -v grep | awk {print $2} | while read line; do kill -9 $line; done 解析&#xff1a; ps aux 命令常用于查看当前系统中运行的进程&#xff0c;以及它们所占用…

2024年3月牛奶乳品行业数据:热销品牌商品排行榜出炉!

鲸参谋监测的某宝平台3月份牛奶乳品市场销售数据已出炉&#xff01; 根据鲸参谋电商数据分析平台显示&#xff0c;今年3月份&#xff0c;某宝平台上牛奶乳品的销量约120万件&#xff0c;环比上个月增长84%&#xff0c;同比去年下滑11%&#xff1b;销售额约5500万元&#xff0c…

手机号验证码登录

点击获取验证码登录---点击获取验证码的时候要对手机号进行校验点击登录按钮的时候也要对表单进行一个校验 静态页面 1、静态页面代码---样式自己写1 <template><!-- #ifdef APP || H5 --><uni-forms class"login-form" :rules"mobileRules&qu…

怎么获取Unity的安装目录

现成api EditorApplication.applicationPath 获取结果&#xff1a;C:/Program Files/Unity/Hub/Editor/2021.3.10f1/Editor/Unity.exe EditorApplication.applicationContentsPath 获取结果&#xff1a;C:/Program Files/Unity/Hub/Editor/2021.3.10f1/Editor/Data

量化地形处理

1: 量化地形切片&#xff1a;GDAL查询数据&#xff1b;CTB算法转mesh&#xff1b;高度图需要和周围高度图边界做高度融合&#xff0c;四顶点需要做平均值融合&#xff1b;法线想要在前端显示正确必须将mesh坐标转为4326或者3857&#xff1b; 这个使用开源即可&#xff1a;cesi…

PoseC3D数据预处理

poseC3D需要根据以下配置文件进行数据预处理 test_pipeline [dict(typeUniformSampleFrames, clip_len48, num_clips10),dict(typePoseDecode),dict(typePoseCompact, hw_ratio1., allow_imgpadTrue),dict(typeResize, scale(64, 64), keep_ratioFalse),dict(typeGeneratePos…

Flume进阶

目录 第1关:拦截器的使用 第2关:自定义拦截器 第1关:拦截器的使用 代码文件: # Define source, channel, sink #agent名称为a1# Define source #source类型配置为avro,监听8888端口,后台会自动发送数据到该端口 #拦截后台发送过来的数据,将y.开头的保留下来# Define chan…

asp.net结课作业中遇到的问题解决3

目录 1、想实现不止鼠标滑过就显示图片&#xff0c;初始化状态下也可以显示图片&#xff0c;且每个图片还会自动变化&#xff0c;该如何实现 2、 同一个项目下的网页之间可以直接在地址栏输入跳转到阅读界面从而实现在这个跳转&#xff0c;那么如何防止这种现象呢&#xff1f;…

自主实现Telnet流量抓取

自主实现Telnet流量抓取 根据测试需求&#xff0c;需要抓取Telnet流量包&#xff0c;使用wireshark Python&#xff08;socket、telnetlib库&#xff09;实现 实现代码 主要此处有坑&#xff0c; 根据协议规则&#xff0c;wireshark 默认端口为23 的是Telnet协议&#xff0…

【JavaEE精炼宝库】计算机是如何工作的

目录 前言&#xff1a; 一、冯诺依曼体系 二、CPU基本知识 2.1 硬盘|内存|CPU关系&#xff1a; 2.2 指令&#xff1a; 2.3 CPU是如何执行指令的&#xff08;重点&#xff09;&#xff1a; 2.4 小结&#xff1a; 三、编程语言 3.1 程序&#xff1a; 3.2 编程语言发展&a…

Java中HashSet、LinkedHashSet和TreeSet的底层原理

HashSet Java中的HashSet的底层原理主要基于哈希表&#xff08;HashMap&#xff09;来实现。以下是HashSet底层原理的简要总结&#xff1a; 数据结构&#xff1a; HashSet内部使用哈希表&#xff08;实际上是一个HashMap的实例&#xff09;来存储元素。哈希表由一个数组&#…

C#面:解释什么是WCF?目前最新的版本是多少

WCF&#xff08;Windows Communication Foundation&#xff09;是微软提供的一种用于构建分布式应用程序的框架。它提供了一种统一的编程模型&#xff0c;使开发人员能够使用多种通信协议&#xff08;如HTTP、TCP、MSMQ等&#xff09;在不同的平台上进行通信。 WCF的主要目标是…

线程传参、线程ID

传递临时对象作线程参数 #include<ioatream> #include<thread> using namespace std; void nowork(const int& a) {cout<<huyanluanyu<<endl; } int main() {int a677;thread newdozer(nowork,a);newdozer.detach(); } 向新创建的线程中传递参数…

【人工智能】博弈搜索(极小极大值、α-β剪枝)

1. 极小极大值算法 人工智能中 “博弈” 通常专指博弈论专家们称为有完整信息的、确定性的、轮流行动的、两个游戏者的零和游戏&#xff08;如国际象棋)。术语中&#xff0c;这是指在确定的、完全可观察的环境中两个 Agent必须轮流行动&#xff0c;在游戏结束时效用值总是相等并…

Python 进阶(十九):解析命令行参数(argparse 模块)

大家好&#xff0c;我是水滴~~ 当处理命令行参数时&#xff0c;Python 的 argparse 模块是一个强大而灵活的工具。它提供了一个简单且一致的方式来定义命令行参数、选项和子命令&#xff0c;并帮助你解析和验证用户提供的输入。本教程将详细介绍 argparse 模块的使用方法和常见…

Ansys电力变压器解决方案

电力变压器设计挑战 目前面临的挑战&#xff1a; 1、磁场 • 非线性材料 • 涡流电流 • 磁场随时间的变化 • 瞬态激励源下的磁场变化 • 空间磁场分布 2、电场 • 介电常数的变化 • 电极的尺寸和形状 • 空间电场分布 变压器的两个类别 变压器可以分为两类进行F…

springboot项目中引入Xxl-Job并部署和使用

目录 模块划分 配置调度中心 配置执行器 添加执行器 写一个简单的定时任务 XxlJobHelper xxl-job是分布式任务调度平台&#xff0c;部署为独立的调度服务平台 github地址&#xff1a;xuxueli/xxl-job: A distributed task scheduling framework.&#xff08;分布式任务调度…

视频怎么去水印?这三款工具助你轻松搞定

在视频处理的过程中&#xff0c;水印常常成为我们的一大难题。它不仅影响了视频的美观度&#xff0c;还可能涉及版权问题。那么&#xff0c;如何高效去除视频中的水印呢&#xff1f;接下来&#xff0c;我将为大家推荐三款国内外备受好评的视频去水印工具&#xff1a;水印云、In…

Jmeter性能测试(五)

一、Jmeter参数化常用方式 1、CSV 数据文件设置 2、查询数据库(JDBC Connection Configuration) 二、CSV 数据文件设置 1、准备一个txt文件(不需要写表头&#xff0c;直接写你要用的数据就行了&#xff0c;多个字段用英文逗号隔开) 2、添加一个CSV 数据文件设置(放全局最上…

让《行列视》解放数据力量,提升业务洞察

在当今信息化浪潮下&#xff0c;数据已经成为企业发展的核心驱动力之一。如何更好地管理和利用数据&#xff0c;已成为企业发展过程中亟需解决的问题之一。而报表工具作为数据可视化和分析的利器&#xff0c;正逐渐受到企业的重视和青睐。 一、《行列视》作为报表工具的重要性…