vue3路由的replace属性(四)

一、 replace 属性

  1. 作用:控制路由跳转时操作浏览器历史记录的模式。

  2. 浏览器的历史记录有两种写入方式:pushreplace

    • push是追加历史记录(默认值)。
    • replace是替换当前记录(不会留下可后退的历史记录)。
  3. 开启 replace 模式:在 <RouterLink> 上添加 replace 属性即可。

vue 复制代码
<RouterLink replace .......>News</RouterLink>

以下示例为 About 组件添加了 replace 属性:

复制代码
<div class="navigate">
  <RouterLink to="/home" active-class="active">首页</RouterLink>
  <RouterLink :to="{ name: 'News' }" active-class="active">新闻</RouterLink>
  <RouterLink replace :to="{ path: '/about' }" active-class="active">关于</RouterLink>
</div>

效果说明:

  • 点击首页和新闻时,浏览器可以正常前进和后退(因为使用默认的 push 模式)。
  • 点击关于时,由于使用了 replace 模式,当前历史记录被替换,因此无法通过浏览器的前进/后退按钮返回到该页面。

如下图所示:

1.1. 编程式导航

在 Vue Router 中,除了使用 <RouterLink> 声明式导航,还可以使用 useRouter 提供的 pushreplace 方法进行编程式导航。

注意:在 Vue 3 的组合式 API 中,$route$router 被替换为 useRoute()useRouter() 这两个 hooks。

示例:添加按钮实现编程式导航

目标效果(添加三个按钮,点击后跳转到对应详情):

完整代码示例(News.vue):

复制代码
<template>
  <div class="news">
    <!-- 导航区 -->
    <ul>
      <li v-for="role in roleList" :key="role.id">
        <button @click="checkDetails(role)">查看详情</button>
        <RouterLink :to="{ name: 'Rolenews', params: { id: role.id, skill: role.skill } }">
          {{ role.role }}
        </RouterLink>
      </li>
    </ul>
    <!-- 展示区 -->
    <div class="news-content">
      <RouterView></RouterView>
    </div>
  </div>
</template>

<script setup lang="ts" name="News">
import { reactive } from 'vue'
import { RouterView } from 'vue-router'
import { useRouter } from 'vue-router'

const router = useRouter()

interface RoleImpl {
  id: number
  role: string
  skill: string
}

function checkDetails(role: RoleImpl) {
  // 使用 push 进行跳转(可前进后退)
  router.push({ name: 'Rolenews', params: { id: role.id, skill: role.skill } })
  // 也可以使用 replace(不可前进后退)
  // router.replace({ name: 'Rolenews', params: { id: 1, skill: '后仰跳投' } })
}

const roleList = reactive([
  { id: 1, role: '老大', skill: '后仰跳投' },
  { id: 2, role: '库里', skill: 'logo三分' },
  { id: 3, role: '詹姆斯', skill: '罚球线暴扣' },
])
</script>

<style scoped>
/* 样式略 */
</style>

关键点说明

  • <li> 内部,可以通过 v-forrole 变量获取每一项的数据。
  • 使用 useRouter() 获取路由实例,然后调用 pushreplace 方法进行跳转。
  • checkDetails 函数的参数限定类型(RoleImpl 接口),避免使用 any,提高代码健壮性。
  • pushreplace 方法接收的参数与 <RouterLink>to 属性写法完全一致(例如对象形式 { name, params })。
  • push 会添加历史记录,支持浏览器的后退/前进;replace 不会添加历史记录,直接替换当前条目。

1.2. 重定向

  1. 作用:将特定的路径重新定向到另一个已有路由。常用于设置默认首页或处理 404 之前的默认跳转。
  2. 具体编码:在路由配置中添加 redirect 属性。

js

复制代码
{
  path: '/',
  redirect: '/about'
}
  • 如果不配置重定向,当用户访问根路径 / 时,没有匹配的路由组件,页面可能显示空白或无法展示内容。
  • 配置重定向后,访问根路径会自动跳转到指定的路径(例如 /home),URL 也会随之改变。

效果对比:

未配置重定向时,访问 localhost:5173 没有组件展示:

配置重定向到 /home 后,访问根路径自动跳转,URL 变为 localhost:5173/home

补充说明

  • redirect 也可以使用命名路由的写法:redirect: { name: 'Home' }
  • 重定向是客户端路由层面的跳转,不会发送 HTTP 请求,只是前端路由的替换。
相关推荐
江畔柳前堤8 分钟前
具身智能全景深度指南(2026年9月版):从“会聊天的AI“到“能干活的机器“
大数据·javascript·图像处理·人工智能·分布式·智慧城市·原型模式
️学习的小王12 分钟前
Windows Claude Code 接入 Playwright‑MCP,调用本机Edge浏览器(避坑完整教程)
前端·windows·edge
liuyicenysabel16 分钟前
Grafana + Prometheus 分级告警配置设计(P0/P1/P2)
javascript·grafana·prometheus
律宏阔18 分钟前
CloakBrowser 开发踩坑笔记
前端·浏览器
Made in Haven71224 分钟前
HTML课程笔记补2
前端·笔记·html
Cry丶33 分钟前
Vue 3 业务管理页面实战:组件拆分、父子通信与弹窗复用
前端·javascript·vue.js·父子通信·组件拆分·弹窗复用
雪芽蓝域zzs43 分钟前
Vue前端配置路由通配捕获 404
前端·javascript·vue.js
计算机魔术师44 分钟前
Anthropic 发布电商 Agent 架构与生产实践指南,并开源 commerce-agents 参考实现
前端
IMPYLH1 小时前
HTML 的 <ol> 元素
前端·html
IMPYLH1 小时前
HTML 的 <object> 元素
前端·html