Vue——路由:动态路由

动态路由相关总结

动态路由是什么?
动态路由应该是指在配置路由中,路由路径中使用动态段, 比如用冒号 “ : " 括起来的部分,比如/user/:id。这样,当用户访问/user/123的时候,123会被当作一个参数传递到对应的组件中。同时动态路由中传的参数也是跳转路径一部分,只是的应为动态可换所以称为动态路由

params和query的区别?
params应该是通过路径传递的参数,比如/user/123中的123,而query则是通过问号传递的参数,比如?name=John。这可能会影响参数在组件中的获取参数方式。
params是在 this . $ route.params中,而query则是在this. $route.query中。

一、代码结构总览

你的代码分为三个关键部分:

1. 路由配置(src / router.js) :定义动态路径 /user/:id。
2. 导航链接(pages /main文件/index.vue) :通过 < router-link> 跳转到不同用户的路径(如 /user/1、/user/2)。
3. 用户组件(pages/user文件/index.vue) :接收并渲染动态参数 id。

二、运行流程详解

1. 导航链接(main/index.vue)

<div class="menu">
  <router-link to="/user/1">张三</router-link>  //
  <router-link to="/user/2">李四</router-link>
</div>

当你点击 “ 张三 ” 这个链接时,网址栏,会在网址栏生成一个URL(URL是网址,这个网址是点击张三后所通向的页面),

生成链接:
< router-link> 会渲染为 < a> 标签,点击后修改浏览器 URL 为 /user/1 或 /user/2。

触发路由匹配:
Vue Router 监听到 URL 变化后,会根据网址栏中的路径 /user/1 或 /user/2 匹配到 router.js 中定义的路由规则 /user/:id。

2. 路由配置(router.js)

{
  path: "/user/:id",  //router.js中生成的动态路径参数 :id
  name: "user",
  component: () => import("./pages/user") // 加载用户组件
}

路由配置中动态路径参数 :id :
:id 是一个占位符,表示此段路径是动态的,可以匹配任意值(如 /user/1、/user/abc)。

路由配置中,路由匹配规则:
当用户访问 /user/1 或 /user/2 时,Vue Router 会检查 router.js 中的路由配置,发现 /user/:id 可以匹配这些路径(网址栏生成的URL: 如 …/user/1),并提取 1 或 2 作为参数 id,并在router.js路由配置中,由/user/:id变为/user/1或/user/2

{
  path: "/user/1",  //router.js中生成的动态路径参数 :id
  name: "user",
  component: () => import("./pages/user") // 加载用户组件
}

path: “/user/:id”(URL路径),绑定的组件是user.vue./pages/user"是user.vue组件的路径)

3. 用户组件(user/index.vue)

<template>
  <div>用户的ID{{ $route.params.id }}</div>
</template>

<script>
export default {
  name: "user",
  created() {
    console.log("用户的ID:" + this.$route.params.id);
  }
};
</script>

获取动态参数:
通过 $route.params.id 可以访问路由配置中定义的动态参数 :id。
运行流程:
当用户点击链接时,网址栏生成URL(…/user/1) ,Vue Router将URL 与路由配置进行相关匹配,匹配到 /user/:id 时,将 id=1 传给给相关联的组件,组件用 $route.params.id,接收参数id。

用户组件被实例化,created 钩子中打印 用户的ID:1。
模板中渲染 用户的ID:1。
同理,点击李四时,网址栏生成URL路径: /user/2 ,在路由配置中匹配到 /user/:id ,将 id=2赋值给 r o u t e . p a r a m s . i d 。 route.params.id。 route.params.idroute.params.id 变为 2。

====================================================================================================
当传多个参数时,并且参数类型不固定 类型,可以使用查询参数(query) 传递参数。,但这个参数不是不是跳转路由中的部分
在这里插入图片描述

当传俩个参数时:
点击 “张三” 这个链接,网址栏生成URL(…/user/1/张),URL 和 route.js(路由配置),进行匹配。

<div class="menu">
  <router-link to="/user/1/张">张三</router-link>  
  <router-link to="/user/2">李四</router-link>
</div>

route.js(路由配置)

{
  path: "/user/:id",  //router.js中生成的动态路径参数 :id
  name: "user",
  component: () => import("./pages/user") // 加载用户组件
}

路由配置中并没有找到相匹配的的动态路径参数 " /:id/:name “,(path: “/user/:id/:name”)
所以< router-link to=”/user/1/张">张三< /router-link> 不会路由跳转成功

解决参数不固定问题:(查询参数(query) 传递参数)

如果参数不固定比 如“ /user/1 ” 或 “ /user/1/张三 ” ,这两个同时存在,而路由配置(route.js)里面配置了 /user/:id/:nickname,那么/user/1是匹配不到的,这样很不灵活,我们通常使用 “ ? ” 后面加参数的模式来解决,比如:/user?id=1,/user?id=1&nickname=张三,这样的来解决参数不固定的问题,

链接

<div class="menu">
  <router-link to="/user? id=1 & name=张三"">张三</router-link>  
  <router-link to="/user/2">李四</router-link>
</div>

route.js(路由配置,即就是将链接和组将进行关系绑定,和关系传参)

{
  path: "/user",  
  name: "user",
  component: () => import("./pages/user") // 加载用户组件
}

组件

<template>
  <div>用户的ID:{{$route.query.id}},用户的昵称:{{$route.query.nickname}}</div>
</template>

<script>
export default {
  name: "user",
  created() {
    console.log(this.$route.query.id,this.$route.query.nickname)
  }
};
</script>

< router-link to=“/user? id=1 & name=张三”>张三< /router-link >
不属于动态路由:路由配置路径 /user 是静态的,未使用动态参数(如 /user/:id),因此属于通过 query 传参。

动态路由参数是跳转路径的一部分,而查询参数位于问号后面,通常用于可选参数或过滤条件,不算是路径中的一部分。

route.js(路由配置)

{
  path: "/user",  
  name: "user",
  component: () => import("./pages/user") // 加载用户组件
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值