总结一下 Vue 中的路由传值 ,其中涉及了 axios 的使用方法

在使用的时候容易把这几种方法搞混

方式一


组件传值

对应的路由配置:

{
  path: '/detail/:id',
  name: 'Detail',
  component: Detail
}

注: 一定要在路由后面加上 /:id,id 只是一个参数名,无所谓,但是需要与传递和接收时的参数名保持一致

直接调用 $router.push 实现携带参数跳转

this.$router.push({ path:`/detail/${id}` })

注: 在跳转传参时,path 后面是用两个反引号包起来的,而不是双引号或者单引号,并且是使用 ${} 的形式把所需要的参数传过去

在子组件中进行接收

this.$route.params.id

注:route,而不是 router


如果使用路由属性中的 name 来确定匹配的路由进行传参的话,需要这样:

对应路由的配置:

{
  path: '/detail',
  name: 'Detail',
  component: Detail
}

携带参数跳转:

this.$router.push({
  name: 'Detail',
  params: {
	id: id
  }
})

注: 这里不能使用 /:id 来传递参数了,因为父组件中,已经使用 params 来携带参数了。

子组件中接收参数:

this.$route.params.id

再次强调,是 route,不是 router

params 传参,用 name 属性对应跳转路径,类似于 post 提交,参数不会出现在跳转路径里。

axios 传值

当我们需要把前端的数据带到后端接口时,也可以用这种方式进行传值

例如:

前端中调用后端接口的代码:

this.$axios.get(`http://127.0.0.1:3000/api/user/find/${id}`)

在后端中进行接收:

router.get('/find/:id',(req,res)=>{
  // 接收
  let id = req.params.id
})

注意是 get 请求

这样的请求方式是会在地址栏中显示的
地址栏链接示例:http://127.0.0.1:3000/api/user/find/10

方式二


组件传值

对应的路由配置:

{
  path: '/detail',
  name: 'Detail',
  component: Detail
}

携带参数跳转:

this.$router.push({
  path:'/detail',
  query:{
    id: id
  }
})

注: 这里使用的是 query

然后在子组件中进行接收:

this.$route.query.id

注: 传递时参数名一定要保持一致,接收时,不要用 params 了,要使用 query 进行接收

query 传参,用 path 属性对应跳转路径,类似于 get 提交,参数是在路径里显示的。

axios 传值

如果要在 axios 中使用的话,可以这样:

例如:

前端调用后端接口代码:

this.$axios.get(`http://127.0.0.1:3000/api/user/delete?name=${name}&age=${age}`)

其实这样是和上面再写一个 query 是一样的,不过这样更加简便

注: 是用两个反引号包起来,后面使用的是 ? 号,而不是 /

使用这种方式的话,可以一次性在地址栏中传递多个值,中间用 & 符进行连接,是 get 请求

因为浏览器的地址栏有长度限制,所以如果参数过多时,不建议用这种方式

在后端中进行接收:

router.get('/delete'(req,res)=>{
  let name = req.query.name;
  let age = req.query.age;
})

注: 这里不要在 /delete 后面加东西了,接收的时候用 query 的方式进行接收

使用这样的方式进行传值,也是会在地址栏中显示的
地址栏链接示例:http://127.0.0.1:3000/api/user/delete?name=zhangsan&age=10

特别提醒

  • 如果用 params 进行传参,一定要用 name 属性来对应跳转路径
  • 如果用 query 进行传参,一定要用 path 属性来对应跳转路径

方式三


这里只说 axios 传值

axios 传值

当我们调用后端接口要在数据库中插入数据的时候(添加数据),可以这样使用:

前端调用后端接口:

this.$axios.get(`http://127.0.0.1:3000/api/user/add`,{name=this.name,age=this.age`})

等号后面的 name 和 age 是你从表单里得到的数据,然后保存到了 data 里面,然后从 data 里面拿出来

在后端进行接收:

router.post('/add',(req,res)=>{
  let name = req.body.name;
  let age = req.body.age;
})

注: 这里接收时用 body 进行接收,是 post 请求

一般我们要向服务器提交数据的时候,都是使用的 post 请求,这种请求方式是安全的,使用这种方式的话,数据是不会在地址栏中显示的。