vue动态路由传参---query传参和params传参

当一个页面跳转到另一个页面时,组件结构相同,只是内容不同且地址栏后缀不同 ,这个地址栏的后缀就是参数,根据不同参数渲染不同的内容,这个跳转就叫路由传参。

当项目中组件间通过路由跳转,有时,我们需要传递一个组件中的参数到另一个组件中使用,那么我们此时就不能够靠组件间直接传递数据,只能通过路由导航传参

路由传参有两种方式:query传参和params传参

1.query传参

参数会显示到地址栏中,类似get请求,所以当刷新页面时,不会丢失数据

字符串传参

在路径后面通过?拼接传递的参数,有点类型接口中的get请求

<router-link to="/login?username=张三">登录</router-link>

传递参数(搭配name)

传递的参数在query对象中

<router-link :to="{name:'login',query:{username:'张三'}}">登录</router-link>

传递参数(搭配name)

传递参数在query对象中

<router-link :to="{path:'/login',query:{username:'张三'}}">登录</router-link>

举个项目的栗子😃(有一个文章列表,点击每一篇文章,路由跳转带上相应的文章id,跳转相应页面通过$route.query.id获取文章id发起请求获取文章内容)

设置路由:

{
path:'/detail',
compoment:articleDetail
}

点击某一篇文章实现跳转到这个匹配路由上

  clickFn (id) {
      console.log(123)
      // 点击实现路由切换
      this.$router.push({
        path: `/detail?aid=${id}`
      })
    }

跳转到这个路由一般需要根据你这个参数调用接口获取这个文章详情内容

封装接口:

export const articleDetailAPI = ({ id }) => {
  return request({

    url: `/v1_0/articles/${id}`,
    method: 'GET'

  })
}

调用这个接口获取数据

  async created () {
    // 页面一开始获取文章详情内容
    const res = await articleDetailAPI({
      id: this.$route.query.aid
    })
    console.log(res)
  }

❗❗❗注意:获取参数的时候是$route.query 而不是$router 这很重要!!!

$ router是用来操作路由的,$ route是用来获取路由信息的。

2.params传参

路由路径不配置占位符!!!!

刷新页面,会丢失数据,因为数据没有存在地址栏中,每次组件加载前都会销毁

只能使用对象+name传参

<router-link :to="{name:'login',params:{username:'张三'}}">登录</router-link>

路由路径中配置占位符!!!!

刷新页面,数据不会丢失,因为参数拼接到了路径中,组件不会销毁重新加载,只是改变组件中的数据

 let router = new VueRouter({
        routes:[{
            name:'login',
            path:'/login/:username',   //配置属性
            component:LoginComponent
        }]
    })

字符串传参

路径拼接:/后边直接写参数

<router-link to="/login/张三">登录</router-link>

对象传参(搭配name)

<router-link :to="{name:'login',params:{username:'张三'}}">登录</router-link>

对象传参(搭配path)

<router-link :to="{path:'/login/zs'}">登录</router-link>

每个人都有自己喜欢的传递方式。

我比较喜这种写法:

//   直接调用$router.push 实现携带参数的跳转
        this.$router.push({
          path: `/describe/${id}`,
                          })

// 需要对应路由配置如下:
 {
     path: '/describe/:id',
     name: 'Describe',
     component: Describe
   }
//获取参数方法
this.$route.params.id

❗但这种情况项目中不能这么写,会有问题

this.$router.push({
          name: 'Describe',
          params: {
            id: id
          }
        })
// 路由配置:

  {
     path: '/describe',
     name: 'Describe',
     component: Describe
   }

//获取参数
this.$route.params.id

❗❗❗在路由配置中可以添加:/id 也可以不添加,添加数据会在url后面显示,不添加数据就不会显示,如果不添加刷新页面会出现一个致命的问题,数据会发生丢失(刷新页面,会丢失数据,因为数据没有存在地址栏中,每次组件加载前都会销毁)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Vue3中的路由传参有两种方式:queryparamsquery是通过URL中的查询参数传递参数,例如:/user?id=123&name=张三。在路由配置中,可以使用props属性将query参数映射到组件的props中。 params是通过URL中的路径参数传递参数,例如:/user/123。在路由配置中,需要使用动态路由配置来定义路径参数,例如:/user/:id。在组件中可以通过$route.params来获取路径参数。 需要注意的是,query参数是可选的,而params参数是必须的。另外,query参数可以在URL中直接修改,而params参数只能通过路由跳转来修改。 ### 回答2: Vue.js是一款流行的JavaScript框架之一,它具有易用、高效且灵活的特点。在Vue.js中,路由是非常重要的一个模块,而路由传参就是常见的需求。 Vue3版本中,路由传参主要有两种方式:queryparams。 1. Query传参 Query传参是通过在URL中添加参数,从而将参数传递给目标组件。比如我们要传递一个名称为“name”,值为“user”的参数,可以在路由链接中添加“?name=user”的参数: ```javascript <router-link :to="{ path: '/user', query: { name: 'user' } }">User</router-link> ``` 在目标组件中,我们可以通过$router对象来访问参数: ```javascript this.$route.query.name // user ``` 2. Params传参 Params传参是通过在路由路径中添加参数,从而将参数传递给目标组件。以用户ID为例,我们可以在路由配置中添加“:id”参数: ```javascript { path: '/user/:id', name: 'User', component: User } ``` 在路由链接中,我们可以通过$router对象来设置参数: ```javascript <router-link :to="{ path: '/user/1' }">User 1</router-link> ``` 在目标组件中,我们可以通过$router对象来访问参数: ```javascript this.$route.params.id // 1 ``` 需要注意的是,我们在路由配置中定义的参数名和在路由链接中传递的参数名必须保持一致。另外,Params传参是不支持通过键值对的方式传递多个参数的。 总结 在Vue3中,路由传参有两种方式:queryparamsQuery传参是通过在URL中添加参数,Params传参是通过在路由路径中添加参数。在使用路由传参时,我们需要注意传递参数的方式和参数名的一致性,以确保传参能够正常工作。 ### 回答3: Vue3 是目前全球使用人数最多的前端框架之一,其中路由也是 Vue3 中非常重要的一个部分。在Vue3中,我们可以使用路由传递参数从一个页面到另一个页面。Vue3 路由传参分为两种方式:queryparams。 1. query方式 query方式是通过URL传参的方式将参数进行传递和获取的。在URL后面加上 ?参数名=参数值,可以传递一个或多个参数,多个参数之间使用 & 符号连接。 比如,我们可以这样传递参数: ```javascript <router-link :to="{path:'/user',query:{id:1,name:'Tom'}}">用户</router-link> ``` 在路由中我们可以通过 `$route.query` 获取传递的参数,例如: ```javascript { path: '/user', name: 'user', component: User, query: { id: 1, name: 'Tom' } } ``` 2. params方式 params方式是通过路由路径中的参数将参数进行传递和获取的。使用这种方式传递参数时,参数会变成路由路径的一部分。 比如,我们可以这样传递参数: ```javascript <router-link :to="{ path: '/user/1/Tom' }">用户</router-link> ``` 在路由中我们可以通过 `$route.params` 获取传递的参数,例如: ```javascript { path: '/user/:id/:name', name: 'user', component: User, params: { id: 1, name: 'Tom' } } ``` 总的来说,Vue3 路由传参 queryparams 都有其优劣势。query 参数可以传递任意数量的参数,但是 URL 中传递参数可能会因为长度而受限;params 参数可以在 URL 中优雅地显示要传递的参数,但是只能传递有限的参数,并且参数的顺序也很重要。根据实际情况,我们应该灵活使用不同的方式来进行参数传递。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值