首页 > 其他分享 >03 Vue3路由

03 Vue3路由

时间:2024-04-15 17:56:27浏览次数:21  
标签:03 route props 参数 params Vue3 router 路由

Vue3的路由与Vue2相似,关于 Vue2的路由器相关可以参考
Vue2 vue-router
下面是一些补充

路由器工作模式

  1. history模式

    优点:URL更加美观,不带有#,更接近传统的网站URL

    缺点:后期项目上线,需要服务端配合处理路径问题,否则刷新会有404错误。

    const router = createRouter({
    	history:createWebHistory(), //history模式
    	/******/
    })
    
  2. hash模式

    优点:兼容性更好,因为不需要服务器端处理路径。

    缺点:URL带有#不太美观,且在SEO优化方面相对较差。

    const router = createRouter({
    	history:createWebHashHistory(), //hash模式
    	/******/
    })
    

命名路由

可以简化路由跳转及传参

给路由规则命名:

routes:[
  {
    name:'zhuye',
    path:'/home',
    // 设置重定向
    redirect:'/',
    component:Home
  },
  {
    name:'xinwen',
    path:'/news',
    component:News,
  },
  {
    name:'guanyu',
    path:'/about',
    component:About
  }
]

to的两种写法

字符串写法

<router-link active-class="active" to="/home">主页</router-link>

active-class 是自定义活动类的名称

对象写法

# 可以写路径
<router-link active-class="active" :to="{path:'/home'}">Home</router-link>

# 也可以写路由的名称
<router-link active-class="active" :to="{name:'zhuye'}">Home</router-link>

路由传参

query参数

传递参数

     <!-- 跳转并携带query参数(to的字符串写法) -->
      <router-link to="/news/detail?a=1&b=2&content=欢迎你">
      	跳转
      </router-link>

      <!-- 跳转并携带query参数(to的对象写法) -->
      <RouterLink 
        :to="{
          //name:'xiang', //用name也可以跳转
          path:'/news/detail',
          query:{
            id:news.id,
            title:news.title,
            content:news.content
          }
        }"
      >
        {{news.title}}
      </RouterLink>

接收参数-【route.query】

  ```js
  import {useRoute} from 'vue-router'
  const route = useRoute()
  // 打印query参数
  console.log(route.query)
  ```

params参数

一定要设置路由占位

路由规则占位

{
	name:'xiang',
	// 设置占位符,?表示该参数可传可不传
	path:'detail/:id/:title/:content?',
	component:Detail,
}

传递参数

     <!-- 跳转并携带params参数(to的字符串写法),不用加&连接,直接写内容即可 -->
      <RouterLink :to="`/news/detail/001/新闻001/内容001`">{{news.title}}</RouterLink>


      <!-- 跳转并携带params参数(to的对象写法) -->
      <RouterLink 
        :to="{
          name:'xiang', // 必须用name跳转,不可以使用path
          params:{
            id:news.id,
            title:news.title,
            content:news.title
          }
        }"
      >
        {{news.title}}
      </RouterLink>

接收参数-【route.params】

     import {useRoute} from 'vue-router'
     const route = useRoute()
     // 打印params参数
     console.log(route.params)

备注1:传递params参数时,若使用to的对象写法,必须使用name配置项,不能用path

备注2:传递params参数时,需要提前在规则中占位。

路由的props配置--【推荐】

作用:让路由组件更方便的收到参数(可以将路由参数作为props传给组件),直接引用使用

{
	name:'xiang',
	path:'detail',
	component:Detail,

  // props的布尔值写法,作用:把收到了每一组【params参数】,作为props传给Detail组件--【主要params传参】
  // props:true
  
  // props的函数写法,作用:把返回的对象中每一组key-value作为props传给Detail组件
  props(route){
    return route.query
  }
}

接收参数的时候,直接接收参数,并使用

<script lang="ts" setup>
defineProps(['id', 'title', 'content']);
</script>

replace属性

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

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

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

    <RouterLink replace .......>News</RouterLink>
    

编程式导航

路由组件的两个重要的属性:$route$router变成了两个hooks

import {useRoute,useRouter} from 'vue-router'

const route = useRoute()
const router = useRouter()

// 接收参数
console.log(route.query)
console.log(route.parmas)

// 路由跳转
console.log(router.push)
console.log(router.replace)

// 参考
router.push('/news')
router.push({
  path:'/news',
  query:{
    a:XXX
    b:xxx
  }
})

标签:03,route,props,参数,params,Vue3,router,路由
From: https://www.cnblogs.com/songxia/p/18136180

相关文章

  • 03、VRRP协议报文
    VRRP协议报文VRRP协议报文用来将Master设备的优先级和状态通告给同一备份组的所有Backup设备。VRRP协议报文封装在IP报文中,发送到分配给VRRP的IP组播地址。在IP报文头中,源地址为发送报文接口的主IP地址(不是虚拟IP地址),目的地址是224.0.0.18,TTL是255,协议号是112。主IP地址(Prima......
  • 18、BGP分层路由
    BGP分层路由定义BGP分层路由是指将一台设备上BGP路由分成基础路由和分层路由。部署BGP分层路由功能可为数据中心网络的故障场景提供更快的路由收敛速度,特别是在分层路由数量远大于基础路由的场景中能够达到较好的收敛效果。为了能够实现BGP分层路由收敛功能,新增了一种分层收......
  • P10330 [UESTCPC 2024] 黑白珠串
    原题链接1.极限构造法,黑珠数量\(\geqslant\)\(max(y_i)\),白珠数量\(\geqslant\)\(max(x_i-y_i)\)再观察样例,发现刚好把1全部放左边,0全部放右边时等号成立code#include<bits/stdc++.h>usingnamespacestd;intx,y[100005];intmain(){intk;cin>>k;......
  • 03、IS-IS认证
    IS-IS认证IS-IS认证是基于网络安全性的要求而实现的一种认证手段,通过在IS-IS报文中增加认证字段对报文进行认证。当本地路由器接收到远端路由器发送过来的IS-IS报文,如果发现认证密码不匹配,则将收到的报文进行丢弃,达到自我保护的目的。认证的分类根据报文的种类,认证可以分为......
  • 04、IS-IS路由渗透
    IS-IS路由渗透通常情况下,Level-1区域内的路由通过Level-1路由器进行管理。所有的Level-2和Level-1-2路由器构成一个连续的骨干区域。Level-1区域必须且只能与骨干区域相连,不同的Level-1区域之间并不相连。Level-1-2路由器将学习到的Level-1路由信息装进Level-2LSP,再泛洪LSP给......
  • 03、OSPF与BFD联动
    OSPF与BFD联动定义双向转发检测BFD(BidirectionalForwardingDetection)是一种用于检测转发引擎之间通信故障的检测机制。BFD对两个系统间的、同一路径上的同一种数据协议的连通性进行检测,这条路径可以是物理链路或逻辑链路,包括隧道。OSPF与BFD联动就是将BFD和OSPF协议关联......
  • vue指令中的import不生效,如何在指令中使用import { useBaseStore, useLocalStore } fr
    在Vue指令中,不能直接使用父组件中的导入语句和变量。指令是在模板编译阶段执行的,而不是在JavaScript的运行时执行的。因此,无法在指令中直接访问父组件的导入和变量。在Vue指令中,不能直接使用ES6的import语法,因为指令是在模板编译阶段执行的,而不是在JavaScript的运行......
  • java基础_03_包机制
    1、包的本质,就是文件夹 2、建包方法: packagecom.baidu.hhb;//这就是包,必须加在整个类的最上边,不能删,删除后下面的类就找不到包importxiaodi_java_base.*;//*通配符,可以导入该目录下所有的类。importxiaodi_java_base.khhhk;//导入类importjava.util.Date;......
  • js获取时间差,返回格式为01天02小时03秒
    //获取时间差返回值格式:01天02小时30秒exportfunctioncaclulateDiffTime(start,end):string{start=newDate(start).getTime();end=newDate(end).getTime();letstaytimeGap=end-start;if(staytimeGap<0){staytimeGap=start-end;}i......
  • day01-03_我的Java学习笔记(Java基础语法--注释、字面量、变量、二进制、ASCII编码、
    1.Java基础语法1.1注释1.2字面量(Python中叫数据类型)1.3变量1.3.1变量的定义及使用1.3.2变量使用注意事项1.4数据的存储形式:二进制字节、字、bit、byte的关系:字word字节byte位bit,来自英文bit,音译为“比特”,表示二进制位。字长是指字的......