零基础Vue入门6——Vue router

本节重点:

  1. 路由定义
  2. 路由跳转

前面几节学习的都是单页面的功能(都在专栏里面https://blog.csdn.net/zhanggongzichu/category_12883540.html),涉及到项目研发都是有很多页面的,这里就需要用到路由(vue router)。学习本节之后就可以写一个小型的项目了。

跟着练习一定带你可以上手开发vue项目。

我在gitcode上也建了了对应的vue学习项目,会跟随我的专栏进行定期代码更新,有需要可以克隆下载GitCode - 全球开发者的开源社区,开源代码托管平台

Vue Router

Vue Router 是 Vue.js 的官方路由。功能包括:

  • 路由跳转、传参、查询、通配符
  • 嵌套路由
  • 动态路由
  • 路由切换过滤效果
  • HTML5 history 模式或 hash 模式
  • .......

入门项目开发,可以先从掌握基础的路由跳转开始。

浏览器url上  /    之后的就是页面路由,后面的就是页面传递的参数,多层的/就是嵌套路由的概念。例如:

所谓客户端路由,就是把你应用中的页面和浏览器的URL绑定起来,实现:

用户浏览不同页面——URL更新——组件更新。

通过配置路由来告诉 Vue Router 为每个 URL 路径显示哪些组件。

例如下面的例子,有3个页面通过一个导航来切换不同的页面。

路由定义

想要实现上述效果,第一步创建一个路由实例,在你项目的src目录下面新建router文件夹,之后新建一个index.ts文件。

import { createRouter, createWebHistory } from 'vue-router'
import Home from '@/views/home/index.vue'

const router = createRouter({
  history: createWebHistory(import.meta.env.BASE_URL),
  routes: [
    {
      path: '/',
      name: 'index',
      redirect: '/home',
    },{
      path: "/home",
      name: "home",
      component: Home,
      children: [
        {
          path: 'homeLayout',
          name: '首页',
          component: () => import('@/views/home/HomeView.vue')
        },
        {
          path: 'vue01',
          name: '第一节',
          component: () => import('@/views/vue01/index.vue')
        },
        {
          path: 'vue02',
          name: '第二节',
          component: () => import('@/views/vue02/index.vue')
        }
      ]
    }
  ],
})

export default router

上面就定义了一个嵌套路由,/home就是项目的入口文件,/home/homeLayout就是首页,以此类推。其中:

  •  routes 选项定义了一组路由,把 URL 路径映射到组件
  • component 参数指定要渲染的组件
  • 在main.ts中注册路由
  • 在 App.vue 中添加路由渲染容器组件 <RouterView> 渲染

这些路由组件通常被称为视图,本质上它们只是普通的 Vue 组件。

路由的不同历史模式

  1. Hash模式:用 createWebHashHistory() 创建, URL 之前使用了一个井号(#
  2. HTML5模式:用 createWebHistory() 创建 ,URL 会看起来很 "正常",官网也比较推荐这种模式。

路由访问

在首页定义了一个导航

  • 导航跳转(也就是声明式路由)可以使用routerLink组件的to属性定义
  • 通过方法跳转(也就是编程式路由)的话可以使用router.push('对应的路由url')方法实现
<template>
  <div class="ln_container">
    <nav>
      <RouterLink v-for="item in menu" :to="item.path">{
  
  { item.name }}</RouterLink>
    </nav>
    <div class="ln_main">
      <RouterView />
    </div>
  </div>
</template>

<script setup lang="ts">
import { RouterLink, RouterView,useRouter } from 'vue-router';
import { ref,watch } from 'vue';

const menu = ref([
  {
    name: '首页',
    path: '/',
  },
  {
    name: 'vue01',
    path: '/home/vue01',
  }, {
    name: 'vue02',
    path: '/home/vue02',
  },
]);

const router = useRouter();
// 监听路由变化,如果跳转到/home,则跳转到/home/homeLayout
watch(() => router.currentRoute.value.path, (to) => {
  if (to === '/home') {
    router.push('/home/homeLayout');
  }
}, { immediate: true });

</script>

<style scoped lang="scss">
.ln_container {
  width: 100%;
  height: 100%;
  nav {
    display: flex;
    padding: 10px;
    font-size: 16px;
    border-bottom: 1px solid #e0e0e0;
    margin-bottom: 10px;
    a {
      display: inline-block;
      padding: 10px;
      line-height: 20px;
      text-decoration: none;
      color: #333333;
      &:hover{
        background-color: #f0f0f0;
      }
    }
  }
}

nav a:first-of-type {
  border: 0;
}

.ln_main {
  padding: 10px;
}
</style>

通过 useRouter() 和 useRoute() 来访问路由器实例和当前路由。

常用api

重定向 redirect

const routes = [{ path: '/home', redirect: { name: 'homepage' } }]

路由传参params

// 定义
const routes = [
  { path: '/users/:id', component: User },
];



// 使用

<template>
  <div>
    User {
  
  { router.params.id }}
  </div>
</template>

导航守卫

简单项目基本这些就够用了,项目要求比较高的话,例如需要检查用户是否已经登录,没有登录的需要先跳转到登录页等等权限方面的需求的,就需要用到导航守卫了。

 router.beforeEach(async (to, from) => {
   if (
     // 检查用户是否已登录
     !isAuthenticated &&
     // ❗️ 避免无限重定向
     to.name !== 'Login'
   ) {
     // 将用户重定向到登录页面
     return { name: 'Login' }
   }
 })

更多路由导航学习:导航守卫 | Vue Router

路由切换过渡效果:过渡动效 | Vue Router

404页面

如果客户在浏览器上写了一个没有对应路由的url,怎么显示呢?可以提供一个默认的没找到的页面,匹配所有未找到路径的页面。

const router = createRouter({
  history: createWebHistory(),
  routes: [
    {...},// 正常的路由页面
    { 
      path: '/:pathMatch(.*)',  // 未匹配的页面
      component: NotFoundComponent 
    }
],
})


以上就是全部内容了。

若碰到其他的问题 可以私信我 一起探讨学习
如果对你有所帮助还请 点赞 收藏 谢谢~!
关注收藏博客 持续更新中。

从零开始轻松掌握Vue.js,欢迎订阅我的博客专栏!https://blog.csdn.net/zhanggongzichu/category_12883540.html?utm_medium=notify.im.notify-business-fans.20250124.a&username=zhanggongzichu

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

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

相关文章

京准:NTP卫星时钟服务器对于DeepSeek安全的重要性

京准&#xff1a;NTP卫星时钟服务器对于DeepSeek安全的重要性 京准&#xff1a;NTP卫星时钟服务器对于DeepSeek安全的重要性 在网络安全领域&#xff0c;分布式拒绝服务&#xff08;DDoS&#xff09;攻击一直是企业和网络服务商面临的重大威胁之一。随着攻击技术的不断演化…

网络计算机的五个组成部分

单个计算机是无法进行通信的。所以需要借助网络。 下面介绍一些在网络里常见的设备。 一、服务器 服务器是在网络环境中提供计算能力并运行软件应用程序的特定IT设备 它在网络中为其他客户机&#xff08;如个人计算机、智能手机、ATM机等终端设备&#xff09;提供计算或者应用…

MATLAB实现单层竞争神经网络数据分类

一.单层竞争神经网络介绍 单层竞争神经网络&#xff08;Single-Layer Competitive Neural Network&#xff09;是一种基于竞争学习的神经网络模型&#xff0c;主要用于数据分类和模式识别。其核心思想是通过神经元之间的竞争机制&#xff0c;使得网络能够自动学习输入数据的特…

【漫画机器学习】082.岭回归(或脊回归)中的α值(alpha in ridge regression)

岭回归&#xff08;Ridge Regression&#xff09;中的 α 值 岭回归&#xff08;Ridge Regression&#xff09;是一种 带有 L2​ 正则化 的线性回归方法&#xff0c;用于处理多重共线性&#xff08;Multicollinearity&#xff09;问题&#xff0c;提高模型的泛化能力。其中&am…

网络安全 | 零信任架构:重构安全防线的未来趋势

网络安全 | 零信任架构&#xff1a;重构安全防线的未来趋势 一、前言二、零信任架构的核心概念与原理2.1 核心概念2.2 原理 三、零信任架构的关键技术组件3.1 身份管理与认证系统3.2 授权与访问控制系统3.3 网络与安全监测系统3.4 加密与数据保护技术 四、零信任架构与传统安全…

网络爬虫学习:借助DeepSeek完善爬虫软件,增加停止任务功能

一、引言 我从24年11月份开始学习网络爬虫应用开发&#xff0c;经过2个来月的努力&#xff0c;终于完成了开发一款网络爬虫软件的学习目标。这几天对本次学习及应用开发进行一下回顾总结。前面已经发布了两篇日志&#xff1a; 网络爬虫学习&#xff1a;应用selenium从搜*狐搜…

JVM图文入门

往期推荐 【已解决】redisCache注解失效&#xff0c;没写cacheConfig_com.howbuy.cachemanagement.client.redisclient#incr-CSDN博客 【已解决】OSS配置问题_keyuewenhua.oss-cn-beijing.aliyuncs-CSDN博客 【排坑】云服务器docker部署前后端分离项目域名解析OSS-CSDN博客 微服…

VScode如何使用deepseek详细教程

本章教程,主要介绍如何在vscode中,安装使用deepseek教程。deepseek生成式人工智能模型最近可是非常的热门。感兴趣的可以尝试看看吧。 一、注册deepseek账号 注册登录地址:https://platform.deepseek.com/api_keys 注册登录账号之后,创建一个API key ,将这个API key复制下…

大数据相关职位介绍之三(数据挖掘,数据安全 ,数据合规师,首席数据官,数据科学家 )

大数据相关职位介绍之三&#xff08;数据挖掘&#xff0c;数据安全 &#xff0c;数据合规师&#xff0c;首席数据官&#xff0c;数据科学家 &#xff09; 文章目录 大数据相关职位介绍之三&#xff08;数据挖掘&#xff0c;数据安全 &#xff0c;数据合规师&#xff0c;首席数据…

[基础]端口隔离实验

实验教程 隔离类型 双向隔离&#xff1a;统一端口隔离组的接口之间隔离&#xff0c;不同端口隔离组的接口之间不隔离&#xff0c;端口隔离只针对同一设备上的端口隔离组成员&#xff0c;对于不同设备上的接口而言无法实现。单向隔离&#xff1a;实现不同端口隔离组的接口之间的…

vscode 如何通过Continue引入AI 助手deepseek

第一步&#xff1a; 在deepseek 官网上注册账号&#xff0c;得到APIKeys(deepseek官网地址) 创建属于自己的APIKey,然后复制这个key,(注意保存自己的key)! 第二步&#xff1a; 打开vscode,在插件市场安装Continue插件, 点击设置&#xff0c;添加deepseek模型&#xff0c;默认…

FPGA的IP核接口引脚含义-快解

疑问 手册繁琐&#xff0c;怎样快速了解IP核各输入输出接口引脚的含义。 答疑 不慌不慌&#xff0c;手册确实比较详细但繁琐&#xff0c;如何快速知晓该部分信息&#xff0c;涛tao道长给你们说&#xff0c;简单得很&#xff0c;一般新入门的道友有所不知&#xff0c;往往后面…

“AI隐患识别系统,安全多了道“智能护盾”

家人们&#xff0c;在生活和工作里&#xff0c;咱们都知道安全那可是头等大事。不管是走在马路上&#xff0c;还是在工厂车间忙碌&#xff0c;又或是住在高楼大厦里&#xff0c;身边都可能藏着一些安全隐患。以前&#xff0c;发现这些隐患大多靠咱们的眼睛和经验&#xff0c;可…

RocketMQ中的NameServer主要数据结构

1.前言 NameServer是RocketMQ中的一个比较重要的组件&#xff0c;我们这篇博客针对NameSever中包含的组件进行分析&#xff0c;分析一下NameServer中包含的组件以及组件的作用。以前我有一篇博客中rocketMq源码分析之搭建本地环境-CSDN博客&#xff0c;在这篇博客中就简单看了…

8-登录流程

在AppStartInitFinish_CreateLoginUI.初始化后&#xff0c;执行Login界面的初始化 登录面板逻辑&#xff1a;UILoginComponentSystem,针对组件UILoginComponent创建的System 登录面板逻辑&#xff1a;UILoginComponent 逻辑层: LoginHelper中的clientSenderComponent.LoginA…

基于HAI部署DeepSeekR1的招标文书智能辅助生产开发与应用

一、前言 1.1行业背景 在日常商业活动中&#xff0c;招投标流程往往是企业竞标和项目落地的关键一环。其中&#xff0c;招标文书的编写工作对于投标企业极具挑战&#xff1a;既要保证逻辑清晰、条理分明&#xff0c;又必须遵循招标机构的各类格式规范&#xff0c;甚至还有特定…

SQL/Panda映射关系

Pandas教程&#xff08;非常详细&#xff09;_pandas 教程-CSDN博客 SQL&#xff1a;使用SELECT col_1, col_2 FROM tab; Pandas&#xff1a;使用df[[col_1, col_2]]。 SQL&#xff1a;使用SELECT * FROM tab WHERE col_1 11 AND col_2 > 5; Pandas&#xff1a;使用df…

Sentinel的安装和做限流的使用

一、安装 Release v1.8.3 alibaba/Sentinel GitHubA powerful flow control component enabling reliability, resilience and monitoring for microservices. (面向云原生微服务的高可用流控防护组件) - Release v1.8.3 alibaba/Sentinelhttps://github.com/alibaba/Senti…

院校联合以项目驱动联合培养医工计算机AI人才路径探析

一、引言 1.1 研究背景与意义 在科技飞速发展的当下&#xff0c;医疗人工智能作为一个极具潜力的新兴领域&#xff0c;正深刻地改变着传统医疗模式。从疾病的早期诊断、个性化治疗方案的制定&#xff0c;到药物研发的加速&#xff0c;人工智能技术的应用极大地提升了医疗服务…

Hot100之矩阵

73矩阵置零 题目 思路解析 收集0位置所在的行和列 然后该行全部初始化为0 该列全部初始化为0 代码 class Solution {public void setZeroes(int[][] matrix) {int m matrix.length;int n matrix[0].length;List<Integer> list1 new ArrayList<>();List<…