您现在的位置是:首页 >技术教程 >1、vue-router切换路由的方式(命名路由和编程式导航和历史记录)网站首页技术教程

1、vue-router切换路由的方式(命名路由和编程式导航和历史记录)

EchoLiner 2024-06-17 10:22:18
简介1、vue-router切换路由的方式(命名路由和编程式导航和历史记录)

/src/router/index.ts

import { createRouter, createWebHistory, RouteRecordRaw } from "vue-router";

// 路由数组的类型 RouteRecordRaw
const routes: Array<RouteRecordRaw> = [
    {
        path: '/',
        // 命名路由
        // 好处:不需要path: '/'这样url硬编码的形式去跳转路由
        // 名字需唯一,不要和其他组件的路由名字重复
        name: 'Login',
        component: () => import('../components/Login.vue')
    },
    {
        path: '/reg',
        name: 'Reg',
        component: () => import('../components/Reg.vue')
    }
];

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

export default router;

/src/main.ts

import { createApp } from 'vue'
import './style.css'
import App from './App.vue'
// 使用./router代替./router/index.ts,引入时可以省略index.ts
import router from './router';

const app = createApp(App);

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

/src/App.vue

前言:如果页面直接使用a标签,切换a标签时具有默认行为,会刷新页面

<template>

  <!-- 
    如果页面直接使用a标签,切换a标签时具有默认行为,会刷新页面
  -->
  <a href="/">登录</a>
  <a href="/reg">注册</a>

</template>

一、使用<router-link>自定义标签切换路由,不会刷新页面

<router-link>链接方式一

to等于字符串,字符串的值是路由里path的值

<template>

  <!-- 
    一、使用<router-link>自定义标签切换路由,不会刷新页面 

    <router-link>链接方式一
    to等于字符串,字符串的值是路由里path的值
  -->
  <router-link to="/">登录1</router-link>
  <router-link to="/reg">注册1</router-link>

  <router-view></router-view>

</template>

<router-link>链接方式二

:to等于对象,对象的内容和router.push()的内容一致

<template>

  <!-- 
    <router-link>链接方式二
    :to等于对象,对象的内容和router.push()的内容一致
  -->
  <router-link :to="{ name: 'Login' }">登录2</router-link>
  <router-link :to="{ name: 'Reg' }">注册2</router-link>

  <router-view></router-view>

</template>

二、使用编程式导航切换路由,给标签添加点击事件

router.push() 会保留历史记录,浏览器地址栏的左右箭头可以点击

router.replace() 不会保留历史记录,浏览器地址栏的左右箭头不能点击

1、router.push()

(1)goJump()的参数是路由里path的值

<script setup lang="ts">
import { useRouter } from "vue-router";

const router = useRouter();

const goJump = (path: string) => {
  
  // 编程式导航router.push()

  // 1、push字符串路径
  // router.push(path);

  // 2、push路径对象
   router.push({
    path
   });
}
<template>

  <!-- 二、使用编程式导航切换路由,给标签添加点击事件 -->
  <!-- goJump()的参数是路由里path的值 -->
  <button @click="goJump('/')">登录3</button>
  <button @click="goJump('/reg')">注册3</button>

  <router-view></router-view>

</template>

(2)goJump()的参数是路由里name的值

<script setup lang="ts">
import { useRouter } from "vue-router";

const router = useRouter();

const goJump = (path: string) => {
  // 3、push名字对象
  router.push({
    name: path
  });
}
<template>

  <!-- goJump()的参数是路由里name的值 -->
  <button @click="goJump('Login')">登录4</button>
  <button @click="goJump('Reg')">注册4</button>

  <router-view></router-view>

</template>

2、router.replace()

(1)直接在<router-link>标签写replace属性

<template>

  <!-- replace 不会保留历史记录,浏览器地址栏的左右箭头不能点击了 -->
  <!-- (1)直接在<router-link>标签写replace属性 -->
  <router-link replace to="/">登录5</router-link>
  <router-link replace to="/reg">注册5</router-link>

  <router-view></router-view>

</template>

(2)使用router.replace()方法

(3)在router.push()中增加replace属性

<script setup lang="ts">
import { useRouter } from "vue-router";

const router = useRouter();

const toJupm = (url: string) => {
  // (2)使用router.replace()方法
  // router.replace(url);

  // (3)在router.push()中增加replace属性
  router.push({
    path: url,
    replace: true
  })

}

</script>

<template>

  <button @click="toJupm('/')">登录6</button>
  <button @click="toJupm('/reg')">注册6</button>

  <router-view></router-view>

</template>
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。