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

news2024/10/6 18:28:23

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.coloradmin.cn/o/1653237.html

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

相关文章

旧衣回收小程序开发:线上回收模式成为行业发展趋势

当下人们生活水平在不断提高&#xff0c;对衣服的要求也在增加&#xff0c;更新速度越来越快&#xff0c;闲置下来的旧衣服也在增加&#xff0c;为了减少浪费&#xff0c;旧衣回收行业受到了大众的关注。旧衣回收对我国资源回收、环境保护具有非常大的意义。 在互联网时代下&a…

练英语口语的app哪个好?6个软件教你快速练习英语口语

练英语口语的app哪个好&#xff1f;6个软件教你快速练习英语口语 练习英语口语对于提高语言能力非常重要&#xff0c;而现代科技为我们提供了许多方便实用的应用来帮助我们快速有效地进行口语练习。以下是六款优质的英语口语练习应用&#xff0c;它们结合了各种学习方式和技术…

数据库系统理论——关系数据库

文章目录 一、关系&#xff08;数据结构&#xff09;1、概述2、名词解释3、关系模式、关系数据库、关系数据库模式4、基本关系的性质 二、关系操作&#xff08;数据操作&#xff09;三、关系的完整性1、实体完整性2 、参照完整性3、用户自定义的完整性 四、关系代数五、习题 前…

解决Redis的键值前出现类似\xAC\xED\x00\x05t\x00*这样的字符序列

文章目录 1.问题2.解决方法3.StringRedisTemplate和RedisTemplate的区别 1.问题 在使用RedisTemplate对Redis进行操作时,发现Reids键值对前有\xAC\xED\x00\x05t\x00*这样的字符序列 如图所示: 虽说不影响使用,但是听影响观感的 2.解决方法 查找了很多方法,可以指定RedisTem…

笔试强训Day20 动态规划 模拟

经此一役小红所向无敌 题目链接&#xff1a;A-经此一役小红所向无敌_牛客小白月赛37 (nowcoder.com) 思路&#xff1a; 水题 直接跟思路即可。 AC code&#xff1a; #include<iostream> using namespace std; typedef long long LL; LL a1,a2,b1,b2,t1,t2,sum; int m…

Observability:监控与可观察性不同的 3 个原因

作者&#xff1a;来自 Elastic Elastic Observability Team 监控和可观察性通常可以互换使用&#xff0c;但它们并不完全相同。 监控是可观察性的重要组成部分&#xff0c;但可观察性远远超出了传统监控实践的范围。 主要区别&#xff1a;监控从各个组件收集数据 —— 时间和内…

高阶RAG-ReRank

1.背景-现RAG存在的问题 现在很明显&#xff0c;仅仅依靠向量检索技术不足以开发 RAG 应用程序&#xff0c;尤其是在生产环境中部署。 以下为案例&#xff1a; 关键词搜索容易返回不回答问题的结果稠密检索容易返回不正确的结果 实际RAG检索中也有很多类型问题&#xff0c;…

stm32 st7735驱动 详解

初始化指令 void LCD_Init(void) { #if USE_SIM_SPILCD_SIM_SPI_GPIO_Init(); #endifLCD_RES_0();//复位HAL_Delay(100);LCD_RES_1();HAL_Delay(100);LCD_BLK_1();//打开背光HAL_Delay(100);//************* Start Initial Sequence **********//LCD_SPI_Send_Cmd(0x11); //Sl…

链表面试题目:反转一个单链表的两种方法(解析+代码)

我们继续来看一下单链表的题目和代码吧&#xff0c;把学习的知识运用到实际中&#xff0c;大家加油 先看OJ题目 OJ题目&#xff08;反转单链表&#xff09; 双指针法 1.创建两个指针&#xff0c;为pre curr&#xff0c;curr指向头结点&#xff0c;curr用来遍历链表 2.curr指向…

VisualGDB : 在windows上开发和调试Linux代码(一)

传送门&#xff1a; 《VisualGDB &#xff1a; 解决编码导致的编译错误》 一、补充windows上 VisualGDB的安装 这里给大家附一个官方的下载路径&#xff1a;https://visualgdb.com/download/&#xff0c;根据自己的系统选择下载 笔者另附一个云盘的下载路径 VisualGDB https…

129423-53-6,Na+荧光探针一种可透过细胞的钠选择性荧光指示剂

引言&#xff1a;在化学研究的海洋中&#xff0c;优质的化学试剂是实验成功的关键。今天&#xff0c;我要为大家分享一款备受好评的化学试剂——SBFI AM。这款试剂以其独特的性能和广泛的应用领域&#xff0c;赢得了众多科研人员的青睐。 中文名称&#xff1a;钠离子荧光探针 …

不止是搭建 | 极空间虚拟机安装一个可做生产力的Ubuntu桌面系统以及后续优化

不止是搭建 | 极空间虚拟机安装一个可做生产力的Ubuntu桌面系统以及后续优化 哈喽小伙伴们好&#xff0c;偶是Stark-C~ 我在上篇极空间文章中不是给小伙伴们分享了使用虚拟机安装软路由固件『iStoreOS』的教程嘛&#xff1a; 打造Docker完全体&#xff0c; 开箱即用的各类插…

【牛客】【模板】前缀和

原题链接&#xff1a;登录—专业IT笔试面试备考平台_牛客网 目录 1. 题目描述 2. 思路分析 3. 代码实现 1. 题目描述 2. 思路分析 前缀和模板题。 前缀和中数组下标为1~n。 前缀和&#xff1a;pre[i]pre[i-1]a[i]; 某段区间 [l,r]的和&#xff1a;pre[r]-pre[l-1] 3.…

SARscape操作:GF3 数据预处理

1、设置 Prefrences 参数 点击 SARscape->Preferences->Preferences specific&#xff0c;弹出如下图所示的对话框&#xff1b; 点击 Load Preferences&#xff0c;在弹出的菜单栏中选择适用于GF3影像处理的 MR(between 10m and 30m) 模式&#xff1b; 点击 General p…

iphone忘记锁屏密码怎么解锁?这些解锁方法你必须知道!

在使用iPhone的过程中经常会遇到很多问题&#xff0c;比如忘记了iPhone的锁屏密码。面对这样的情况&#xff0c;许多用户可能会感到手足无措。别担心&#xff0c;本文将为您详细介绍iPhone忘记锁屏密码的解锁方法&#xff0c;让您轻松解决这一烦恼。 一、使用iTunes备份恢复 如…

scrapy抓取博客

scrapy主要的步骤&#xff1a; 创建一个scrapy项目获取博客内容和保存抓去url和title储存标题和链接获取文章内容 一.创建一个scrapy&#xff1a; 在桌面上会生成一个文件夹&#xff1a; 在开始爬虫前&#xff0c;打开items.py: class BlogspiderTtem(scrapy.Item):titlesc…

MacOS搭建docker本地私有镜像库

相关环境 macOS: bigsur 11.7.8 docker desktop: 4.22.0 docker engine: 24.0.5 准备工作 本机已经安装好docker desktop&#xff0c;未安装的自行参考其他教程。如果不能翻墙&#xff0c;可以修改本地的镜像地址&#xff0c;可在docker desktop 设置中的docker engine中修…

【数学建模】天然肠衣搭配问题

2011高教社杯全国大学生数学建模竞赛D题 天然肠衣&#xff08;以下简称肠衣&#xff09;制作加工是我国的一个传统产业&#xff0c;出口量占世界首位。肠衣经过清洗整理后被分割成长度不等的小段&#xff08;原料&#xff09;&#xff0c;进入组装工序。传统的生产方式依靠人工…

JVS物联网平台5.7功能新增说明

项目介绍 JVS是企业级数字化服务构建的基础脚手架&#xff0c;主要解决企业信息化项目交付难、实施效率低、开发成本高的问题&#xff0c;采用微服务配置化的方式&#xff0c;提供了 低代码数据分析物联网的核心能力产品&#xff0c;并构建了协同办公、企业常用的管理工具等&am…

【组合数学】2842. 统计一个字符串的 k 子序列美丽值最大的数目

本文涉及知识点 组合数学汇总 LeetCode 2842. 统计一个字符串的 k 子序列美丽值最大的数目 给你一个字符串 s 和一个整数 k 。 k 子序列指的是 s 的一个长度为 k 的 子序列 &#xff0c;且所有字符都是 唯一 的&#xff0c;也就是说每个字符在子序列里只出现过一次。 定义 f…