首页 > 其他分享 >vue3-路由Router

vue3-路由Router

时间:2024-11-27 18:44:18浏览次数:7  
标签:vue vue3 user router 组件 Router 跳转 路由

基本使用(与vue2语法有差异)

  1. 安装vue-router,vue3需要使用vue-router的4版本

    npm i vue-router@4  
    
  2. 编写路由文件

    // 引入createRouter
    import {createRouter, createWebHistory} from "vue-router";
    
    // 引入组件
    import UserInfo from "@/components/UserInfo.vue";
    
    // 创建一个路由
    const router = createRouter({
            // vue3路由必须指定工作模式
            history: createWebHistory(),
            // 定义规则和vue2一样
            routes: [
    
                {
                    path: "/user", // 路径
                    component: UserInfo // 组件
                }
            ]
        }
    )
    
    export default router
    
    
  3. 使用路由

    // main.ts
    
    import './assets/main.css'
    
    import { createApp } from 'vue'
    import App from './App.vue'
    
    import router from "@/routers";
    
    // 创建应用
    const app = createApp(App)
    
    
    // 使用路由
    app.use(router)
    
    // 挂载容器
    app.mount('#app')
    
    
  4. 路由跳转

    <script setup lang="ts" name="App">
    
    // 引入路由视图、路由跳转
    import {RouterView, RouterLink} from "vue-router";
    
    </script>
    
    
    <template>
      <p>App组件</p>
      <!-- to:路由跳转路径 , active-class 路由被激活时显示的效果,值是一个css类-->
      <RouterLink to="/user" active-class="active">跳转User</RouterLink>
      <!-- 路由对应组件显示的位置 -->
      <RouterView></RouterView>
    </template>
    
  5. 路由组件(路由规则渲染)通常存放在pagesviews文件夹,一般组件(组件标签渲染)通常存放在components文件夹。

  6. 通过点击导航,视觉效果上“消失” 了的路由组件,默认是被卸载掉的,需要的时候再去挂载

  7. RouterLink to属性的两种写法,规则和vue2一致

    • <!-- 第一种:to的字符串写法 -->
      <RouterLink to="/user">to user</RouterLink>
      
    • <!-- 第二种:to的对象写法 -->
      <RouterLink active-class="active" :to="{path:'/user'}">to user</RouterLink>
      
  8. 路由器的工作模式

    1. history模式

      //URL不带有#,更接近传统的网站URL
      // 项目上线,需要服务端配合处理路径问题,否则刷新会有404错误,与vue2一样
      
      const router = createRouter({
      	history:createWebHistory()
      
      })
      
    2. hash模式

      // 兼容性更好,因为不需要服务器端处理路径
      // URL带有#,在SEO优化方面相对较差
      const router = createRouter({
      	history:createWebHashHistory()
      })
      

命名路由(语法与vue2一样)

给路由起别名,方便跳转引用

 routes: [
            {
                path: "/user", // 路径
                component: UserInfo, // 组件
              	name:"get_user" // 命名
            }
        ]
    <RouterLink :to="{name:'get_user'}">to </RouterLink>

嵌套路由(语法与vue2一样)

  1. 路由设置

     routes: [
    
            {
                path: "/user",
                component: UserInfo,
                // 通过children 配置多级路由,可以配置多个路由
                children: [
                    {
                        path: "list",  // 不需要写/
                        component: UserList,
                      	name:"userList"
                    }
    
                ]
            }]
    
  2. 路由跳转

    <!-- 字符串写法跳转路径要写完整的路径-->
    <RouterLink to="/user/userList">to </RouterLink>
    <!-- 使用别名直接跳转 -->
    <RouterLink :to="{name:'userList'}">to </RouterLink>
    <!-- 子路由显示位置 -->
    <RouterView></RouterView>
    
    

路由参数(与vue2接收语法差异)

useRoute

主要用于获取当前路由的信息,是一个只读的操作。返回的是一个表示当前路由状态的对象,这个对象包含了如路径(path)、路由参数(params)、查询参数(query)等属性

query参数
  1. 传递参数

    <!-- 字符串写法 -->
    <RouterLink :to="/user/userList?id=${id}">to </RouterLink>
    <!-- 对象写法-->
    <RouterLink :to="{
                     // path:'/user/userList'  path和name跳转都可以
                     name:'userList',
                     query:{
                     id:id
                     }}">to </RouterLink>
    
  2. 接收参数

    import {useRoute} from 'vue-router'
    // useRoute是一个组合式函数。它用于在组件内部获取当前路由对象的信息。这个路由对象包含了当前路由的各种参数,如路径、查询参数、动态路由参数等诸多和当前路由状态相关的内容
    const route = useRoute()
    
    {{route.query}}
    {{route.query.id}}
    
params参数
  1. 声明params占位

       {
                    path: "/user",
                    component: UserInfo,
                    children: [
                        {
                            path: "list/:user_id",   // user_id占位
                            component: UserList,
                            name:"userList"
                        }
    
                    ]
                }
    
  2. 传递参数

    <!-- 字符串写法-->
    <RouterLink :to="/user/userList/${user_id}">to </RouterLink>
    <!-- 对象写法-->
    <RouterLink :to="{
                     // 必须使用name跳转,不能使用路径
                     name:'userList',  
                     params:{
                     user_id:user_id
                     }
                     }">to </RouterLink>
    
  3. 接收参数

    import {useRoute} from 'vue-router'
    const route = useRoute()
    
    {{route.params}}
    {{route.params.user_id}}
    

路由props(与vue2语法一致)

让路由组件更方便的收到参数(可以将路由参数作为props传给组件)

  1. 开关写法

      children: [
                        {
                            path: "list/:user_id",   // user_id占位
                            component: UserList,
                            name:"userList",
                            // 收到的所有params参数以key、value的形式给组件
                            // 需要在组件内defineProps接收
                            props:true,
                        }
    
                    ]
    
  2. 函数写法

    props(to) {
    
      // 将所有query参数以key-value的形式传递给组件
      // 需要在组件内defineProps接收
      // to.params是所有的params参数
      return to.query
    }
    
  3. 对象写法

    // 直接写死的数据
    props:{
      user_id:100
    }
    

路由replace(与vue2语法一致)

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

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

    • push是追加历史记录(默认值)。
    • replace是替换当前记录。
  3. 开启replace模式:

    <RouterLink replace :to="{name:'userList'}">to</RouterLink>
    

编程式导航(与vue2语法差异)

当需要实现页面之间的跳转、导航栏的功能或者处理路由相关的操作逻辑时,会用到useRouter

import {useRouter} from 'vue-router'

const router = useRouter()
// 以push 的模式跳转到/user 字符串写法
router.push("/user")
// 以replace的模式跳转到userList 字符串写法
router.replace("/user/userList")

//对象写法,通过name跳转,对象里可以正常写params、query
router.push({name:"userList"})

重定向

将特定的路径,重新定向到已有路由,使用redirect属性

 routes: [
   {
     // 如果访问/路径,重定向到index
     path:"/",
     redirect:"/index"
     
   }
 ]

标签:vue,vue3,user,router,组件,Router,跳转,路由
From: https://www.cnblogs.com/Mickey-7/p/18572884

相关文章

  • HarmonyOS Next 入门实战 - 导航框架:页面路由、组件导航(Navigation)
    页面路由官方不推荐使用页面路由,这里仅做简单介绍。页面路由用于标识@Entry注解的页面间的跳转。包引入import{router}from'@kit.ArkUI';页面跳转router.pushUrl目标页面不会替换当前页,而是压入页面栈router.replaceUrl目标页面会替换当前页,并销毁当前页Router......
  • vue3-setup中使用响应式
    基本类型的响应式数据在Vue3中,ref是一个函数,用于创建响应式的数据。它主要用于处理基本类型(如数字、字符串、布尔值等)的数据响应式当我们调用ref函数时,会返回一个包含一个.value属性的对象。这个对象会被转换成Proxy对象,通过拦截getter和setter操作,实现对.valu......
  • 简单搭建一个小型拓扑,练习路由器的Esay IP的设置
     内网用户需要访问外网时,可以通过配置NAT,实现IP数据报标头IP的替换。本条博客是NAT转换的具体实现方式,由华为官方文档摘录EsayIP的实现。  1.cloud云的配置增加两个Ethernet端口,添加到端口映射表2.路由器的配置#进入系统视图<Huawei>system-view#查看简洁的......
  • vue3-事件总线
    事件总线的概念:事件总线(EventBus)可以理解为一个全局的发布/订阅模式,可以通过它来实现不同组件之间的消息传递。在Vue实例或Vue组件中充当一个中央枢纽,通过它可以让一个组件发出事件,而其他组件监听并响应这些事件事件总线的创建Vue3版本中,我们不再使用newVue()来创建事件总......
  • 路由器的工作原理
    网络拓扑结构主机A:IP地址:10.1.0.1/16MAC地址:MACA主机B:IP地址:10.2.0.1/16MAC地址:MACB网关G0/0/0:IP地址:10.1.0.2/16MAC地址:MACC网关G0/0/1:IP地址:10.2.0.2/16MAC地址:MACD过程描述主机A发送ARP请求:主机A想要与主机B通信,但不知道主机B的MAC地址。......
  • vue3+vite打包配置,并部署nginx,解决部署之后axios请求跨域
    配置base配置base避免打包部署到服务器上后可能会报404,无法正确的获取的资源。//vite.config.tsexportdefaultdefineConfig({ base:"./"})配置路径别名//vite.config.tsimport{defineConfig}from"vite";importvuefrom"@vitejs/plugin-vue";//配置组件路......
  • ENSP四台路由器的相互连通
    首先,我们需要一个这样的拓扑图一.路由器配网关 首先是AR1,一般我自己会习惯第一步先改路由器的名称,以方便使用然后咱们先查一下AR1这台路由器各个接口的配置情况 可以很清晰的看到各个接口已经完成配置下来我们开始配置AR2的网关配置查看AR2的配置情况 第二台也......
  • vue3-setup基本使用(非响应式数据)
    OptionsAPI与COmpositionAPI选项式APiVue2的AP设计是Options(配置、选项式)风格的Options类型的API,数据、方法、计算属性等,是分散在:data、methods、computed中的,若想新增或者修改一个需求,就需要分别修改:data、methods、computed,不便于维护和复用组合式APIVue3的API设计......
  • Vue3医院陪诊全栈项目
    02环境配置和项目搭建(1)下载npm1.1.12版本 https://nvm.uihtm.com(2)安装node.js vscode里进行终端调试:>nvm>nvminstall20.16.0 (通过nvm下载要用的node.js版本,本项目使用的node.js版本为20.16.0)>nvmlist (查看当前下载的依赖)>nvmuse20.16.0 (切换到指定的nod......
  • 深度解析:自愈路由的定义、核心特性及其在网络通信中的优势
    在当今信息化时代,网络已成为各行各业不可或缺的基础设施。随着网络业务的连续性和实时性需求日益增长,对网络路由技术的要求也越来越高。鼎峰新匯自愈路由作为一种先进的网络路由技术,凭借其出色的性能和稳定性,赢得了广泛的关注和认可。本文将详细介绍自愈路由的定义及其特点......