当前位置: 首页 > news >正文

Vue Router(2)

嵌套路由

在父路由组件内部渲染子路由组件,形成层次化的路由结构。

嵌套路由的核心思想:
父路由组件包含一个或多个子路由出口
子路由在父路由的上下文中渲染
URL路径反映路由的层次结构

const routes = [
  {
    path: '/parent',
    component: Parent,
    children: [
      { path: '', component: ParentDefault },
      { path: 'child', component: Child }
    ]
  }
]
// Parent.vue 
<template>
  <div>
    <h2>Parent Component</h2>
    <!-- 子路由将在这里渲染 -->
    <router-view></router-view>
  </div>
</template>

命名路由

可以通过名称而不是路径来引用路由,提高了代码的可维护性和灵活性。

核心特点:
为路由配置分配唯一的名称标识符
通过名称而非硬编码路径进行导航
简化路径更改时的维护工作
支持参数化路由的便捷引用
params 的自动编码/解码

const routes = [
  {
    path: '/user/:id',
    name: 'user-profile', // 命名路由
    component: UserProfile
  }
]

// 导航时使用
router.push({ name: 'user-profile', params: { id: 123 } })

编程式导航

通过编写代码来控制应用的路由跳转,提供了灵活的路由控制方式。

核心特点:
通过JavaScript函数调用触发导航
支持条件导航和动态路径生成
可以在导航前后执行额外逻辑
适用于表单提交、权限验证等场景

导航到不同位置

// 基本导航
router.push('/home') // 字符串路径
router.push({ path: '/home' }) // 路径对象
router.push({ name: 'home' }) // 命名路由

// 带参数
router.push({ name: 'user', params: { id: '123' } })
router.push({ path: '/user/123' })
router.push({ path: '/user', query: { id: '123' } }) //带查询参数,结果是/user?id=123
router.push({ path: '/user', hash: '#team' }) //带 hash,结果是 /user#team

// 替换当前历史记录(无后退)
router.replace({ path: '/login' })

// 历史记录前进/后退
router.go(1) // 前进
router.go(-1) // 后退

注意:如果提供了 pathparams 会被忽略,上述例子中的 query 并不属于这种情况。取而代之的是下面例子的做法,你需要提供路由的 name 或手写完整的带有参数的 path

const username = 'eduardo'
// 我们可以手动建立 url,但我们必须自己处理编码
router.push(`/user/${username}`) // -> /user/eduardo
// 同样
router.push({ path: `/user/${username}` }) // -> /user/eduardo
// 如果可能的话,使用 `name` 和 `params` 从自动 URL 编码中获益
router.push({ name: 'user', params: { username } }) // -> /user/eduardo
// `params` 不能与 `path` 一起使用
router.push({ path: '/user', params: { username } }) // -> /user

当指定 params 时,可提供 stringnumber 参数(或者对于可重复的参数可提供一个数组)。任何其他类型(如对象、布尔等)都将被自动字符串化。对于可选参数,你可以提供一个空字符串("")null 来移除它。

由于属性 torouter.push 接受的对象种类相同,所以两者的规则完全相同。

替换当前位置

作用类似于 router.push ,但不同之处在于导航时不会向 history 添加新记录,而是取代了当前的条目

声明式编程式
<router-link :to="..." replace>router.replace(...)

也可以在传递给时 router.pushto 参数中增加一个属性 replace: true

router.push({ path:'/home',replace:true })
//等价于
router.replace({ path:'/home' })

横跨历史

使用一个整数为参数,表示在历史堆栈中前进或者后退了多少步,类似于 window.history.go(n)

// 向前移动一条记录,与 router.forward() 相同
router.go(1)

// 返回一条记录,与 router.back() 相同
router.go(-1)

// 前进 3 条记录
router.go(3)

// 如果没有那么多记录,静默失败
router.go(-100)
router.go(100)

相关文章:

  • 长沙做网站seo专员是什么职业
  • 网站建设现状分析关键词排名方法
  • 成都今日疫情增加seo网站推广批发
  • ocr是不是用于制作网页的软件快速提升排名seo
  • 网站 微信 app重庆seo什么意思
  • 万网主机 建网站百度手机助手免费下载
  • Spring AI开发MCP Server和MCP Client
  • 从一批视频里面抽取固定的第n帧图片(包含并行实现)
  • lanqiaoOJ 551 灌溉
  • 回溯算法+对称剪枝——从八皇后问题到数独问题(二)
  • 基于autokeras的简单天气预报例子和运行输出
  • Maven 基础知识
  • HarmonyOS-ArkUI 装饰器V2 @ObservedV2与@Trace装饰器
  • 3ds Max 2016的版本怎么处理 按键输入被主程序截断 C#winform窗体接受不到英文输入
  • linux入门六:Linux Shell 编程
  • c++的函数重载
  • 机器学习 | 强化学习方法分类汇总 | 概念向
  • 国产信创数据库:PolarDB 分布式版 V2.0,支持集中分布式一体化
  • Vanna + qwq32b 实现 text2SQL
  • springboot集成springcloud vault读值示例
  • C++ - 数据容器之 unordered_map(声明与初始化、插入元素、访问元素、遍历元素、删除元素、查找元素)
  • 三相电为什么没零线也能通电
  • kali linux vmware 光标无法移出vmware,需要按ctrl + alt 才能移出光标
  • 【DB2】事务日志满/归档占用较大问题处理记录
  • 深入解析栈式虚拟机与反向波兰表示法
  • FacialExpressionDetection的conda虚拟环境搭建Window