第V章-Ⅰ Vue3路由vue-router初识

第V章-Ⅰ Vue3路由vue-router初识

  • 安装
  • Vue路由基础
    • router-link 组件导航
    • router-view 路由出口
    • 单独导入关于路由的库文件
    • 定义路由组件
    • 定义路由规则对象
    • 创建router实例
    • 将路由对象挂载Vue实例上
    • redirect 路由重定向
    • 嵌套路由
  • 路由传参
    • params形式传参
    • query形式传参
    • params方式与query方式的区别
    • restful风格传参
  • 编程式路由
    • Params 形式传参
    • Query 形式传参
    • RESTful 风格传参
    • 通过wathc实现路由监听
    • 导航守卫
    • $route 和 $router 的区别

安装

npm

npm install vue-router@4

yarn

yarn add vue-router@4

Vue路由基础

router-link 组件导航

是 Vue Router 提供的一个组件,用于用户界面中的导航。使用 .to 属性指定导航的目标地址。

<router-link to="/about">About</router-link>

router-view 路由出口

组件是一个容器,它渲染当前路由匹配的组件。每当路由改变时, 加载并显示相应的组件。

<router-view></router-view>

单独导入关于路由的库文件

Vue Router 需要单独安装并导入到你的 Vue 项目中。

import { createRouter, createWebHistory } from 'vue-router';

定义路由组件

路由组件就像任何其他 Vue 组件,但它们通常与路由路径关联。

<template>
  <div>Home Page</div>
</template>

定义路由规则对象

每个路由规则映射到一个组件。

const routes:Array<RouteRecordRaw>=[
    {
        path:'/',
        name:'home',
        component:Home
    }
];

创建router实例

使用 createRouter 方法创建路由实例。

const router = createRouter({
  history: createWebHistory(),
  routes
});

将路由对象挂载Vue实例上

在创建 Vue 应用实例时使用 .use() 方法安装路由。

import { createApp } from 'vue';
import App from './App.vue';

createApp(App).use(router).mount('#app');

redirect 路由重定向

在路由规则中可以设置重定向,通常用于将用户从一个路径自动导向另一个路径。

{ path: '/home', redirect: '/' }

嵌套路由

嵌套路由允许你构建更复杂的用户界面结构,其中一个组件内部包含多个 。

const routes: Array<RouteRecordRaw> = [
  { 
    path: '/user/:id',
    component: User,
    children: [
      {
        path: 'profile',
        component: UserProfile
      },
      {
        path: 'posts',
        component: UserPosts
      }
    ]
  }
];

路由传参

params形式传参

使用动态路由匹配传递参数,参数作为路径的一部分。

{ path: '/user/:id', component: User }

query形式传参

使用 URL 的查询字符串传递参数。

<router-link :to="{ path: '/search', query: { q: 'keyword' }}">Search</router-link>

访问:/search?q=keyword。

params方式与query方式的区别

params:参数视为 URL 的一部分,不出现在 URL 查询字符串中,必须由路由路径定义。
query:参数以 ? 开始的形式附加在 URL 后,不需要在路由路径中定义。

restful风格传参

RESTful 风格的传参通常使用 params 方式,参数是 URL 的一部分,适用于表示资源层级结构。

{ path: '/api/user/:userId/book/:bookId', component: Book }

编程式路由

编程式路由指的是使用 JavaScript 来控制路由跳转,而不是通过声明式的 标签。这允许更加动态和条件性的导航逻辑。

  • router.push(location, onComplete?, onAbort?):导航到一个不同的 URL。行为类似于点击一个 。这是前进到一个新的历史记录。
  • router.replace(location, onComplete?, onAbort?):跟 push 类似,不同的是,它不会留下历史记录。
  • router.go(n):在历史记录中前进或后退多少步,类似 window.history.go(n)。
// useNavigation.ts
import { useRouter } from 'vue-router';

export default function useNavig ation() {
  const router = useRouter();

  const goToHome = () => {
    router.push('/home');
  };

  const replaceWithAbout = () => {
    router.replace('/about');
  };

  const goBack = () => {
    router.go(-1);
  };

  return { goToHome, replaceWithAbout, goBack };
}


Params 形式传参

// router.ts
import { createRouter, createWebHistory, RouteRecordRaw } from 'vue-router';
import UserProfile from '@/components/UserProfile.vue';

const routes: Array<RouteRecordRaw> = [
  {
    path: '/user/:userId', // :userId 是动态部分
    component: UserProfile
  }
];

const router = createRouter({
  history: createWebHistory(),
  routes
});

export default router;

import { useRouter } from 'vue-router';

export default function useUserProfileNavigation() {
  const router = useRouter();

  const goToUserProfile = (userId: string) => {
    router.push({ name: 'user', params: { userId } }); // 确保路由名称或路径匹配
  };

  return { goToUserProfile };
}

Query 形式传参

import { useRouter } from 'vue-router';

export default function useSearchNavigation() {
  const router = useRouter();

  const searchItems = (keywords: string) => {
    router.push({ path: '/search', query: { q: keywords } });
  };

  return { searchItems };
}

RESTful 风格传参

RESTful 风格的 params 传参本质上和普通的 params 传参没有区别,都是将参数作为 URL 的一部分。区别在于 RESTful 风格强调资源的表达方式更为清晰和直观。通常,在设计 API 和路由时采用 RESTful 风格。

通过wathc实现路由监听

在 Vue 3 中,你可以使用 watch 来监听路由变化,这对于依赖于路由状态的应用特别有用。例如,你可能需要根据路由参数加载数据。

// useRouteWatcher.ts
import { watch } from 'vue';
import { useRoute } from 'vue-router';

export default function useRouteWatcher() {
  const route = useRoute();

  watch(() => route.params, (newParams, oldParams) => {
    console.log('Route changed', newParams);
  }, { deep: true });
}

导航守卫

导航守卫是一种特别有用的路由控制技术,允许你在路由发生变化之前执行逻辑,比如权限验证、数据预加载等。

// 在router/index.js中设置
import { NavigationGuardNext, RouteLocationNormalized } from 'vue-router';

router.beforeEach((to: RouteLocationNormalized, from: RouteLocationNormalized, next: NavigationGuardNext) => {
  if (to.meta.requiresAuth && !isAuthenticated()) {
    next({ path: '/login' });
  } else {
    next();
  }
});

$route 和 $router 的区别

  • $route:是一个“路由信息对象”,包含了如路径、查询参数(query)、路由参数(params)等路由信息。
  • $router:是 Vue Router 的实例,可以用它来进行编程式的导航(如 router.push)。
// 例如,在一个组件中
import { useRoute, useRouter } from 'vue-router';

export default function useCheckDetails() {
  const route = useRoute();
  const router = useRouter();

  const checkDetails = () => {
    const id: string = route.params.id as string;
    router.push(`/details/${id}`);
  };

  return { checkDetails };
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Finder Windows for Mac:双系统窗口,一键切换!

Finder Windows for Mac是一款专为Mac用户设计的实用工具&#xff0c;它模拟了Windows系统的窗口管理功能&#xff0c;让Mac用户也能享受到类似Windows的窗口操作体验。这款软件的主要功能是提供一个浮动面板&#xff0c;帮助用户随时即时访问打开的Finder窗口列表&#xff0c;…

力扣每日一题106:从中序与后序遍历序列构造二叉树

题目 中等 相关标签 相关企业 给定两个整数数组 inorder 和 postorder &#xff0c;其中 inorder 是二叉树的中序遍历&#xff0c; postorder 是同一棵树的后序遍历&#xff0c;请你构造并返回这颗 二叉树 。 示例 1: 输入&#xff1a;inorder [9,3,15,20,7], postorder …

在线协作,开源的设计和原型创作平台:penpot

penpot&#xff1a;面向团队&#xff0c;设计自由- 精选真开源&#xff0c;释放新价值。 概览 Penpot 是一款专为跨职能团队量身定制的开源设计软件&#xff0c;与行业领先的 Figma 齐名&#xff0c;提供了一个强大而灵活的在线设计解决方案。其最大的亮点在于&#xff0c;用户…

Qt与MySQL连接

QT连接Mysql数据库&#xff08;详细成功版&#xff09;-CSD N博客 我的MySQL是64位的&#xff0c;所以我的Qt的套件也需要是64位的 遇到的问题&#xff1a; &#xff08;available drivers中已经有QMYSQL QMYSQL3&#xff0c;还是not loaded&#xff09; QSqlDatabase: QMYS…

SQL注入-基础知识

目录 前言 一&#xff0c;SQL注入是什么 二&#xff0c;SQL注入产生的条件 三&#xff0c;学习环境介绍 四、SQL注入原理 五&#xff0c;SQL中常用的函数 六&#xff0c;关于Mysql数据库 前言 在网络安全领域中&#xff0c;sql注入是一个无法被忽视的关键点&#xff0c…

安卓 app icon大小 安卓app界面尺寸大小

移动应用的界面设计画布尺寸设计多大&#xff08;特别是Android&#xff09;、图标和字体大小怎么定、需要设计多套设计稿么、如何切图以配合开发的实现&#xff1f; 本篇将结合iOS和android官方的设计规范、搜集的资料以及工作中的摸索&#xff0c;来分享移动应用界面设计中的…

【C++】STL — List的接口讲解 +详细模拟实现

前言&#xff1a; 本章我们将学习STL中另一个重要的类模板list… list是可以在常数范围内在任意位置进行插入和删除的序列式容器&#xff0c;并且该容器可以前后双向迭代。list的底层是带头双向循环链表结构&#xff0c;双向链表中每个元素存储在互不相关的独立节点中&#xf…

Conntroller内存马详解(2)

流程分析 获取context 第一种&#xff1a;getCurrentWebApplicationContext() // getCurrentWebApplicationContext方法获得的是一个XmlWebApplicationContext实例类型的Root WebApplicationContext。WebApplicationContext context ContextLoader.getCurrentWebApplication…

docker部署nginx并实现https

文章目录 docker部署nginx并实现https1、服务器环境2、安装docker3、准备证书4、准备nginx配置文件和dockerfile文件5、创建nginx镜像与容器6、验证访问 docker部署nginx并实现https 1、服务器环境 [rootliuyanfen12 ~]#systemctl stop firewalld [rootliuyanfen12 ~]#setenf…

Flutter笔记:美工设计.导出视频到RIVE

Flutter笔记 美工设计.导出视频到RIVE - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:https://blog.csdn.net/qq_28…

RabbitMQ之顺序消费

什么是顺序消费 例如&#xff1a;业务上产生者发送三条消息&#xff0c; 分别是对同一条数据的增加、修改、删除操作&#xff0c; 如果没有保证顺序消费&#xff0c;执行顺序可能变成删除、修改、增加&#xff0c;这就乱了。 如何保证顺序性 一般我们讨论如何保证消息的顺序性&…

【Linux】进程的隔离和控制:namespace 隔离、cgroup 控制

文章目录 五、namespace 隔离dd -- 读取、转换并输出数据mkfs -- 格式化文件系统df -- 显示文件系统磁盘使用情况mount -- 加载文件系统到指定的加载点unshare -- 创建子进程&#xff0c;同时与父程序不共享namespace一个 demo 六、cgroup(Control Group) 相关命令pidstat -- 监…

【LeetCode刷题记录】230. 二叉搜索树中第K小的元素

230 二叉搜索树中第K小的元素 给定一个二叉搜索树的根节点 root &#xff0c;和一个整数 k &#xff0c;请你设计一个算法查找其中第 k 个最小元素&#xff08;从 1 开始计数&#xff09;。 示例 1&#xff1a; 输入&#xff1a;root [3,1,4,null,2], k 1 输出&#xff1…

2024年深圳杯东三省联赛数模竞赛A题代码改进-更加合理的结果

4月下旬深圳杯开赛后第二天就推出了完整版的论文&#xff0c;经过长达半个月大家再售后群的讨论分析&#xff0c;我们又重新对之前思路下写的代码进行了改进。本次改进的结果&#xff0c;我们特地参考了网上一些常见的火箭及其相关的级别分离高度&#xff1a;&#xff08;我们的…

c语言刷题——输出图案

1.输出用“*”组成的X形图案 题目&#xff1a;请打印用“*”组成的X形图案 描述&#xff1a; 多组输入&#xff0c;一个整数&#xff08;2~20&#xff09;&#xff0c;表示输出的行数&#xff0c;也表示组成“X”的反斜线和正斜线的长度。 输出描述&#xff1a; 针对每行输…

【C语言】指针篇- 深度解析Sizeof和Strlen:热门面试题探究(5/5)

&#x1f308;个人主页&#xff1a;是店小二呀 &#x1f308;C语言笔记专栏&#xff1a;C语言笔记 &#x1f308;C笔记专栏&#xff1a; C笔记 &#x1f308;喜欢的诗句:无人扶我青云志 我自踏雪至山巅 文章目录 一、简单介绍Sizeof和Strlen1.1 Sizeof1.2 Strlen函数1.3 Sie…

零基础学习数据库SQL语句之查询表中数据的DQL语句

是用来查询数据库表的记录的语句 在SQL语句中占有90%以上 也是最为复杂的操作 最为繁琐的操作 DQL语句很重要很重要 初始化数据库和表 USE dduo;create table tb_emp(id int unsigned primary key auto_increment comment ID,username varchar(20) not null unique comment…

大语言模型中的第一性原理:Scaling laws

大语言模型的尺度定律在大语言模型的训练过程中起到了非常重要的作用。即使读者不参与大语言模型的训练过程&#xff0c;但了解大语言模型的尺度定律仍然是很重要的&#xff0c;因为它能帮助我们更好的理解未来大语言模型的发展路径。 1. 什么是尺度定律 尺度定律&#xff08…

stamps做sbas-insar,时序沉降图怎么画?

&#x1f3c6;本文收录于「Bug调优」专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收藏&&…

【跟我学RISC-V】(二)RISC-V的基础知识学习与汇编练习

写在前面&#xff1a; 这篇文章是跟我学RISC-V的第二期&#xff0c;是第一期的延续&#xff0c;第一期主要是带大家了解一下什么是RISC-V,是比较大体、宽泛的概念。这一期主要是讲一些基础知识&#xff0c;然后进行RISC-V汇编语言与c语言的编程。在第一期里我们搭建了好几个环…
最新文章