六十天前端强化训练之第二十六天之Vue Router 动态路由参数大师级详解

news2025/3/24 17:52:31

=====欢迎来到编程星辰海的博客讲解======

看完可以给一个免费的三连吗,谢谢大佬!

 

目录

一、知识讲解

1. Vue Router 核心概念

2. 动态路由参数原理

3. 参数传递方案对比

二、核心代码示例

1. 完整路由配置

2. 参数接收组件

3. 导航操作示例

三、实现效果示意图

四、学习要点总结

五、扩展阅读推荐

官方文档

深度文章

推荐工具


一、知识讲解

1. Vue Router 核心概念

Vue Router 是 Vue.js 的官方路由管理器,主要功能包括:

  • 嵌套路由映射
  • 动态路由参数
  • 模块化的路由配置
  • 导航控制
  • 自动激活的 CSS 类链接

路由工作原理:

TEXT

URL变化 → 路由匹配 → 渲染组件 → 更新视图

2. 动态路由参数原理

动态路由通过冒号 : 定义参数占位符,实现根据URL变化渲染相同组件不同内容。其核心特性包括:

  1. 参数识别:/user/:id 匹配 /user/123
  2. 响应式更新:参数变化自动触发组件更新
  3. 多参数支持:/posts/:category/:id
  4. 正则约束:path: '/user/:id(\\d+)'(仅数字)

生命周期触发顺序:

TEXT

beforeRouteUpdate → beforeUpdate → updated

3. 参数传递方案对比

方式适用场景可见性参数类型
动态路由参数资源标识类参数显示在URL字符串
Query参数筛选条件类参数显示在URL字符串
Props传参父子组件通信不可见任意类型
Vuex状态管理全局共享数据不可见任意类型

二、核心代码示例

1. 完整路由配置

JAVASCRIPT

// router/index.js
import { createRouter, createWebHistory } from 'vue-router'

const routes = [
  {
    path: '/user/:userId',
    name: 'UserProfile',
    component: () => import('../views/UserProfile.vue'),
    props: true // 将路由参数作为props传递
  },
  {
    path: '/posts/:category/:postId',
    component: () => import('../views/PostDetail.vue'),
    beforeEnter: (to, from) => {
      // 路由独享守卫
      if (!validateCategory(to.params.category)) {
        return { name: 'NotFound' }
      }
    }
  }
]

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

function validateCategory(cat) {
  const allowed = ['tech', 'life', 'news']
  return allowed.includes(cat)
}

export default router

2. 参数接收组件

VUE

<!-- UserProfile.vue -->
<template>
  <div class="user-container">
    <h2>用户ID:{{ userId }}</h2>
    <p>用户名:{{ userInfo.name }}</p>
    
    <!-- 带参数的导航 -->
    <router-link 
      :to="{ name: 'UserProfile', params: { userId: 456 } }"
      class="nav-link"
    >
      查看用户456
    </router-link>
  </div>
</template>

<script>
export default {
  props: ['userId'], // 通过props接收参数
  
  data() {
    return {
      userInfo: {}
    }
  },

  // 选项式API写法
  watch: {
    userId: {
      immediate: true,
      handler(newVal) {
        this.loadUserData(newVal)
      }
    }
  },

  // 组合式API写法
  // setup(props) {
  //   watch(() => props.userId, (newVal) => {
  //     loadUserData(newVal)
  //   }, { immediate: true })
  // },

  methods: {
    async loadUserData(id) {
      try {
        const response = await fetch(`/api/users/${id}`)
        this.userInfo = await response.json()
      } catch (error) {
        console.error('数据加载失败:', error)
        this.$router.push('/error?type=user_load')
      }
    }
  },

  // 路由守卫(新旧路由参数变化时触发)
  beforeRouteUpdate(to, from) {
    if (to.params.userId !== from.params.userId) {
      this.loadUserData(to.params.userId)
    }
  }
}
</script>

3. 导航操作示例

VUE

<!-- App.vue -->
<template>
  <nav>
    <!-- 声明式导航 -->
    <router-link 
      :to="{ name: 'UserProfile', params: { userId: 123 } }"
      class="nav-item"
    >
      我的账号
    </router-link>

    <!-- 编程式导航 -->
    <button @click="viewPost('tech', 789)">
      查看技术文章
    </button>
  </nav>
  
  <router-view class="main-content"/>
</template>

<script>
export default {
  methods: {
    viewPost(category, postId) {
      this.$router.push({
        path: `/posts/${category}/${postId}`
      })
      
      // 或使用命名路由
      // this.$router.push({
      //   name: 'PostDetail',
      //   params: { category, postId }
      // })
    }
  }
}
</script>

三、实现效果示意图


(示意图说明:展示路由切换时URL变化、参数更新和组件内容动态加载效果)

四、学习要点总结

  1. 参数定义

    • 使用冒号语法 :paramName
    • 支持多级参数 /a/:b/c/:d
    • 正则约束 /user/:id(\\d+)
  2. 参数获取

    JAVASCRIPT

    // 选项式API
    this.$route.params.userId
    
    // 组合式API
    import { useRoute } from 'vue-router'
    const route = useRoute()
    route.params.userId
    
  3. 响应式更新

    • 使用 watch 监听参数变化
    • 使用 beforeRouteUpdate 导航守卫
    • 使用 onBeforeRouteUpdate 组合式API钩子
  4. 最佳实践

    JAVASCRIPT

    // 良好的参数校验
    {
      path: '/product/:id',
      component: ProductPage,
      beforeEnter: (to) => {
        if (!isValidProductId(to.params.id)) {
          return { path: '/invalid-product' }
        }
      }
    }
    
    // 数据预加载模式
    async beforeRouteEnter(to, from, next) {
      const data = await fetchInitialData(to.params.id)
      next(vm => vm.setData(data))
    }
    
  5. 常见问题

    • 参数变化未触发更新?检查组件复用情况
    • 路由匹配失败?检查路由定义顺序
    • 获取不到参数?检查路由配置和导航方式

五、扩展阅读推荐

官方文档

  1. 动态路由匹配
  2. 路由守卫
  3. 路由组件传参

深度文章

  1. Vue Router 高级匹配模式
  2. 路由参数优化策略
  3. 路由鉴权最佳实践

推荐工具

  1. 路由路径可视化工具
  2. Vue Router 调试插件
  3. API Mock 工具

通过本教程可以掌握:
✅ 动态路由的配置与使用
✅ 参数变化的响应处理
✅ 路由守卫的实战应用
✅ 性能优化关键技巧

建议按照以下步骤实操:

  1. 创建基本路由配置
  2. 添加动态路由参数
  3. 实现参数监听
  4. 添加路由守卫
  5. 进行参数校验
  6. 优化数据加载逻辑

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

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

相关文章

Model Context Protocol:下一代AI系统集成范式革命

在2023年全球AI工程化报告中,开发者面临的核心痛点排名前三的分别是:模型与业务系统集成复杂度(58%)、上下文管理碎片化(42%)、工具调用标准化缺失(37%)。传统API集成模式在对接大语言模型时暴露明显短板:RESTful接口无法承载动态上下文,GraphQL缺乏工具编排能力,gR…

Java多线程与高并发专题——Future 是什么?

引入 在上一篇Callable 和 Runnable 的不同&#xff1f;的最后&#xff0c;我们有提到和 Callable 配合的有一个 Future 类&#xff0c;通过 Future 可以了解任务执行情况&#xff0c;或者取消任务的执行&#xff0c;还可获取任务执行的结果&#xff0c;这些功能都是 Runnable…

DeepSeek本地搭建

1. 软件下载安装 Miniconda Miniconda下载地址 选择对应的版本下载&#xff0c;此处下载如下版本 Python 3.10 conda 25.1.1 安装完成后&#xff0c;配置环境变量&#xff0c;打开cmd命令窗口验证 Python Python的版本为 3.10 PyTorch PyTorch下载地址 后面通过命令下…

维普AIGC降重方法有哪些?

在学术写作和论文创作中&#xff0c;重复率过高是许多人面临的一大难题。随着科技的发展&#xff0c;维普 AIGC 为我们提供了一系列有效的降重方法。那么&#xff0c;维普AIGC降重方法有哪些呢&#xff1f;接下来就为大家详细介绍。 语义理解与改写 维普 AIGC 具备强大的语义理…

南京审计大学:《 面向工程审计行业的DeepSeek大模型应用指南》.pdf(免费下载)

大家好&#xff0c;我是吾鳴。 今天吾鳴要给大家分享的是由南京审计大学出品的《面向工程审计行业的DeepSeek大模型应用指南》&#xff0c;这份报告与《面向审计行业DeepSeek大模型操作指南》不同&#xff0c;这份报告更多的讲述DeepSeek怎么与工程审计行业结合&#xff0c;应该…

【前端】Canvas画布实现在线的唇膏换色功能

【前端】Canvas画布实现在线的唇膏换色功能 推荐超级课程: 本地离线DeepSeek AI方案部署实战教程【完全版】Docker快速入门到精通Kubernetes入门到大师通关课AWS云服务快速入门实战目录 【前端】Canvas画布实现在线的唇膏换色功能背景概述以下是我们的实现方法!第一步 — 找…

arcgispro加载在线地图

World_Imagery (MapServer)https://services.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer添加arcgis server WMTS 服务 by xdcxdc.at xdc的个人站点。博客请转至 http://i.xdc.at/ http://xdc.at/map/wmts 添加WMTS服务器

华为网路设备学习-16 虚拟路由器冗余协议(VRRP)

VRRP是针对干线上三层网络设备&#xff08;如&#xff1a;路由器、防火墙等&#xff09;的网络虚拟化技术&#xff0c;提供冗余和状态监测等功能。确保在网络中的单点故障发生时&#xff0c;能够快速切换到备份设备&#xff0c;从而保证网络通信的连续性和可靠性。‌ VRRP通过…

封装一个分割线组件

最终样式 Vue2代码 <template><div class"sep-line"><div class"sep-label"><span class"sep-box-text"><slot>{{ title }}</slot> <!-- 默认插槽内容&#xff0c;如果没有传递内容则使用title -->&…

网络HTTPS协议

Https HTTPS&#xff08;Hypertext Transfer Protocol Secure&#xff09;是 HTTP 协议的加密版本&#xff0c;它使用 SSL/TLS 协议来加密客户端和服务器之间的通信。具体来说&#xff1a; • 加密通信&#xff1a;在用户请求访问一个 HTTPS 网站时&#xff0c;客户端&#x…

OSASIS(One-Shot Structure-Aware Stylized Image Synthesis)

文章目录 摘要abstract论文摘要方法损失函数实验结论 总结 摘要 本周阅读了一篇关于新型图像风格化的论文《One-Shot Structure-Aware Stylized Image Synthesis》&#xff0c;旨在解决现有GAN模型在风格化过程中难以保持输入图像结构的问题。通过分离图像的结构和语义信息&am…

C++学习之网盘项目单例模式

目录 1.知识点概述 2.单例介绍 3.单例饿汉模式 4.饿汉模式四个版本 5.单例类的使用 6.关于token的作用和存储 7.样式表使用方法 8.qss文件中选择器介绍 9.qss文件样式讲解和测试 10.qss美化登录界面补充 11.QHTTPMULTIPART类的使用 12.文件上传协议 13.文件上传协议…

Apache Flink技术原理深入解析:任务执行流程全景图

前言 本文隶属于专栏《大数据技术体系》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢! 本专栏目录结构和参考文献请见大数据技术体系 思维导图 📌 引言 Apache Flink 作为一款高性能的分布式流处理引擎,其内部执行机制精妙而复杂。本文将…

RAG(Retrieval-Augmented Generation)基建之PDF解析的“魔法”与“陷阱”

嘿&#xff0c;亲爱的算法工程师们&#xff01;今天咱们聊一聊PDF解析的那些事儿&#xff0c;简直就像是在玩一场“信息捉迷藏”游戏&#xff01;PDF文档就像是个调皮的小精灵&#xff0c;表面上看起来规规矩矩&#xff0c;但当你想要从它那里提取信息时&#xff0c;它就开始跟…

C语言【文件操作】详解中(会使用fgetc,fputc,fgets,fputs,fscanf,fprintf,fread,fwrite函数)

引言 介绍和文件操作中文件的顺序读写相关的函数 看这篇博文前&#xff0c;希望您先仔细看一下这篇博文&#xff0c;理解一下文件指针和流的概念&#xff1a;C语言【文件操作】详解上-CSDN博客文章浏览阅读606次&#xff0c;点赞26次&#xff0c;收藏4次。先整体认识一下文件是…

GpuGeek:破解算力难题,赋能AI创新与普及

文章目录 一、引言二、填补算力资源供需缺口&#xff0c;降低使用门槛三、提升算力资源利用率&#xff0c;推动高效协作四、满足多样化需求&#xff0c;支持AI技术落地五、推动算力市场创新&#xff0c;促进生态良性发展六、助力AI人才培养&#xff0c;推动行业长远发展七、结语…

扣子平台知识库不能上传成功

扣子平台知识库不能上传成功 目录 扣子平台知识库不能上传成功查看模板复制头部到自己的excel中json数据转为excel或者csv&#xff08;一定使用excel&#xff0c;csv总是报错&#xff09; 查看模板复制头部到自己的excel中 json数据转为excel或者csv&#xff08;一定使用excel&…

JVM的组成--运行时数据区

JVM的组成 1、类加载器&#xff08;ClassLoader&#xff09; 类加载器负责将字节码文件从文件系统中加载到JVM中&#xff0c;分为&#xff1a;加载、链接&#xff08;验证、准备、解析&#xff09;、和初始化三个阶段 2、运行时数据区 运行时数据区包括&#xff1a;程序计数…

c++进阶之------红黑树

一、概念 红黑树&#xff08;Red-Black Tree&#xff09;是一种自平衡二叉查找树&#xff0c;它在计算机科学的许多领域中都有广泛应用&#xff0c;比如Java中的TreeMap和C中的set/map等数据结构的底层实现。红黑树通过在每个节点上增加一个颜色属性&#xff08;红色或黑色&am…

ubuntu22.04安装搜狗输入法保姆教程~

一、添加中文语言支持 1.首先打开设置,找到Language and Region 2.点击Manage Installed Languages 3.点击 Install/Remove Languages... 4.选中Chinese (simplified),点击Apply