vue中this.$router.push()路由传值和获取的两种常见方法

news2025/2/27 23:02:04

           今天接到了比较大的需求,由于这个公司的接口调用方法和上一段实习那家公司的写法很不一样,我花了很多时间在摸索,“踏出第一步总是最困难的”,果然没错,第一个很费劲,但完成之后有了思路,下面的任务也就完成得更顺利了一些。简单记录一下吧!

主要步骤:

1.首先要配置一下接口

【api.js】

2.在使用的地方先引入方法

【跳转到的页面】

3.调用的时候要注意是传什么类型的参数,不然请求不回想要的数据

【切记切记看一下接口文档】

4.配置跳转路由,并传出参数(注意类型)

【今天我一开始传了个对象类型:"userKey":"5",旁边的姐姐帮我看了一下,最后改成了userKey:5传过去,果然就返回了正确的数据。】

5.在跳转到的页面中,一定要记得取出参数 this.$route.query/param(看情况)

【有些是传递参数,有些是查询参数,有点区别】

 今天一开始没有头绪的,主要是通过一个博主的文章得到了启发,感谢他!

一、关于点击事件实现跳转并传递参数的方法

用到了this.$router.push()

1.首先我们要定义一个点击事件
2.在定义事件中调用this.$router.push()方法

<template>
	<button @click = "handle">点击跳转</button>
</template>
<script>
    export default{
        methods:{
            handle (){
            //  路径/home对应我在router目录下index.js中定义的path属性值
                this.$router.push('/home');
            }
        }
    }
</script>

 目标跳转页面路由在router目录下index.js定义如下:

export default new Router({
  routes: [
    {
      path: '/home',
      name:'Home',
      component: Home,
    },
 ]
})
      

二、this.$router.push()中的参数规则

  • 参数为字符串,即路径名称
//  路径/home对应router目录下index.js中定义的path属性值
this.$router.push('/home');
  • 参数为对象
//  对应router目录下index.js中定义的path
this.$router.push({path:'/home'});
  • 参数为路由命名
//  对应router目录下index.js中定义的name
this.$router.push({name:'Home'});
  • 带传递参数
// params里面放置的是我们要传递过去的参数
this.$router.push({name:'Home',params:{user:'david'}});
  •  带查询参数
// 带查询参数,传递过去的内容会自动拼接变成/home?user=david
this.$router.push({path:'/home',query:{user:'david'}});

三、参数的接收

当我们使用params进行传参时,只需在接收参数的地方使用this.$route.params进行接收即可

//传参
this.$router.push({name:'Home',params:{user:'david'}});

// 在name为Home的组件中接收参数
const id=this.$route.params.id;
console.log(this.$route.params);//打印结果为{user:'david'}

当我们使用query传参时,只需在接收参数的地方使用this.$route.query进行接收即可,用法同上
!!!这里有一个小细节:$符号后面跟的是route不是router,跳转的时候 $后面跟的是router!!!

四、传递的参数是对象或数组

        还有一种情况就是,如果通过query方式传递的是 对象或数组 ,在地址栏中会被强制转换成[object Object],刷新后页获取不到对象值。

        那么我们可以通过JSON.stringify()方法将参数转换为字符串,在获取参数时通过JSON.parse转换成对象

let parObj = JSON.stringify(obj)
// 路由跳转
this.$router.push({
   path:'/detail',
   query:{
       obj:parObj
   }
})
 
// 详情页获取参数
JSON.parse(this.$route.query.obj)

注意:这样虽然可以传对象,但是如果数据多的话地址栏会很长(不太推荐)。

使用props配合组件路由解耦:

①路由配置中指定参数:id

// 路由配置
{
   path:'/detail/:id',
   name:'detail',
   component:Detail,
   props:true  // 如果props设置为true,$route.params将被设置为组件属性  
}
 
// 路由跳转
this.$router.push({
   path:`/detail/${id}`
})
 
// 详情页获取参数
export default {
  props:['id'],  // 将路由中传递的参数id解耦到组件的props属性上
  mounted(){
    console.log("id",this.id);  
  }
}
②路由配置中未指定参数
// 路由配置
{
   path:'/detail',
   name:'detail',
   component:Detail,
   props:true  // 如果props设置为true,$route.params将被设置为组件属性  
}
 
// 路由跳转
this.$router.push({
   name:'detail',
   params:{
       order:{
         id:'123456789',
         name:'商品名称'  
       }
   }
})
 
// 详情页获取参数
export default {
  props:['order'],  // 将路由中传递的参数order解耦到组件的props属性上
  mounted(){
    console.log("order",this.order);  
  }
}

值得注意的是:

  • 路由配置中指定参数 :id的,页面刷新后参数不会丢失,在路由配置未指定参数的,使用params跳转传参页面刷新后参数会丢失
  •  此外,数据量比较大的参数,可以使用sessionStorage或localStorage来进行存储参数来解决页面刷新参数丢失的问题,具体结合实际项目即可。

注意

${JSON.stringify(this.data)}取数据有长度限制,所以会取不出来数据,换成setStorageSync和getStorageSync就好了

一开始:

结果取不出来

修改后:

取出来了

 query传参的参数会带在url后边展示在地址栏(/home?user=david),params传参的参数不会展示到地址栏

this.$route.query(刷新页面后参数不会丢失

this.$route.params(刷新页面后参数会丢失

由于动态路由也是传递params的,所以在 this.$router.push() 方法中path不能和params一起使用,否则params将无效,需要用name来指定页面
我们也可以用this.$router.replace()来实现页面跳转,二者的区别是push跳转之后可以通过浏览器的回退键回到原来的页面,而一旦使用replace跳转之后,无法回到原来页面

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/405122.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

登录功能的实现(包括前后端)

目录:&#x1f349;&#x1f349;&#x1f349;UPDATE:✨✨✨前言✨✨✨概述✨✨✨技术栈✨✨✨效果图✨✨✨代码✨✨✨github链接&#x1f349;&#x1f349;&#x1f349;UPDATE: 突然发现喜提榜一&#xff0c;蟹蟹读者老爷们的支持(づ&#xffe3; 3&#xffe3;)づ 润色了…

微信小程序完整项目实战(前端+后端)

基于微信小程序的在线商城点单系统 前言&#xff1a;闲来无事&#xff0c;想以后自己开一个小超市或者小吃店&#xff0c;能够支持线上下单&#xff0c;既方便客户也方便自己。系统采用C#语言作为后端实现与小程序的交互&#xff0c;给用来学习或者想自己开个小店的朋友当个参考…

如何在 WordPress 中嵌入 iFrame

&#x1f482; 个人网站:【海拥】【摸鱼游戏】【神级源码资源网站】&#x1f91f; 前端学习课程&#xff1a;&#x1f449;【28个案例趣学前端】【400个JS面试题】&#x1f485; 想寻找共同学习交流、摸鱼划水的小伙伴&#xff0c;请点击【摸鱼学习交流群】&#x1f4ac; 免费且…

【uniapp小程序开发】—— 组件封装之【自定义轮播图】

文章目录&#x1f34b;前言&#xff1a;&#x1f34d;正文1、首先了解swiper组件1.1、小小的demo示例&#xff1a;1.2、自定义轮播图效果展示说明2、完成自定义轮播图效果3、组件封装——自定义轮播图3.1、创建swiper-doc.vue组件3.2、组件调用&#xff0c;封装完成&#x1f38…

session、cookie、token的区别?

前言 今天就来理一理session、cookie、token这三者之间的关系&#xff01; 1.为什么会有它们&#xff1f; 我们都知道 HTTP 协议是无状态的&#xff0c;所谓的无状态就是客户端每次想要与服务端通信&#xff0c;都必须重新与服务端链接&#xff0c;意味着请求一次客户端和服…

React组件通信-父子组件间的通信

文章目录React父子组件通信认识组件嵌套组件通信父传子参数验证子传父React父子组件通信 认识组件嵌套 组件之间存在嵌套关系&#xff1a; 在之前的案例中&#xff0c;我们只是创建了一个组件App&#xff1b; 如果我们一个应用程序将所有的逻辑都放在一个组件中&#xff0c;那…

适合我的前端学习路线(学习前端不迷路)

适合我的前端学习路线&#xff08;学习前端不迷路&#xff09; 小伙伴们想学习前端&#xff0c;但是却不知如何入手&#xff0c;上网查前端学习路线&#xff0c;第一页往往充斥着各种培训公司的广告&#xff0c;又或者是搜前端学习路线图时&#xff0c;出现大量的路线图导致你还…

【学Vue就跟玩一样】Vue中的路由与多种守卫

1.vue-routervue的一个插件库&#xff0c;专门用来实现对SPA应用的单页Web应用(single page web application, SPA)。整个应用只有一个完整的页面。点击页面中的导航链接不会刷新页面&#xff0c;只会做页面的局部更新。数据需要通过ajax请求获取。2.什么是路由一个路由就是一组…

Tomcat服务器部署+Web项目搭建

Tomcat服务器部署&#xff0b;Web项目搭建 1.Tomcat服务器 1 . Tomcat下载 2 . Tomcat启动与关闭 3 . 配置端口号2.IDEA搭建Web项目 1 . web项目创建 2 . 本地服务器配置 Tomcat下载 tomcat官网&#xff1a;tomcat 1.选择与自己电脑对应的位数下载&#xff0c;我们…

HTML跳动爱心代码|最近很火的爱心代码你还没收到吗

最近很火的跳动爱心代码HTML实现可DIY 看效果 QQ录屏20221108115545点个赞吧,养成好习惯 不想动手的小伙伴可以直接&#x1f447;&#x1f447; 阿里云盘直接提取 阿里云盘 DIY版----提取码: f30q 使用说明 主体代码来源于网络,让我们为原作者点赞&#x1f44d;我用css3的anim…

云服务器部署 Web 项目

一: 搭建 Java 部署环境1: 安装 JDK2: 安装 Tomcat总结3: 安装 MySQL(1): 依次安装(2): 更改配置(3): 启动(4): 测试连接二: 部署 web 项目1: 给服务器准备好依赖的数据2: 微调我们的 Java 代码3: 重新打包4: 上传到服务器上5: 验证一: 搭建 Java 部署环境 之前说过 yum这个命…

手把手教你安装VSCode(附带图解步骤)

一、前端工具vscode 1.1、概述 前端开发是创建Web页面或app等前端界面呈现给用户的过程&#xff0c;通过HTML&#xff0c;CSS及JavaScript以及衍生出来的各种技术、框架、解决方案&#xff0c;来实现互联网产品的用户界面交互 [1] 。它从网页制作演变而来&#xff0c;名称上有…

Node安装及配置

目录一、Node安装二、Node环境配置2.1 下载国内淘宝镜像三、下载Node.js项目一、Node安装 首先我们进入Node的官网链接: 下载链接 点击下载&#xff0c;选择自己对应的版本&#xff0c;博主这边使用的Windows 安装包 (.msi) 下载之后双击运行下载包点击下一步 点击change 安装完…

【Vue】悬浮窗和聚焦登录组件经验总结

前言 ​ 本文整理了实现悬浮窗以及聚焦登录组件的功能。 ​ 为的是方便大家和自己的学习。 ​ 省流&#xff1a;可以只看1.2 和 2的代码即可 1 悬浮窗 现在各大流行视频网站的平台都在使用这种悬浮显示的效果&#xff0c;我就想这种东西是怎样搞出来的呢&#xff01;几经尝…

Vue项目保持用户登录状态(localStorage + vuex 刷新页面后状态依然保持)

在前端项目开发中&#xff0c;实现用户的登陆注册功能时常常会有一个问题&#xff0c;那就是我们设置的登录状态&#xff0c;在浏览器页面刷新后就消失了&#xff0c;这其实只是因为我们没有保存用户状态。 这里小马演示使用的是 localStorage vuex 方法&#xff08;其他诸如…

SpringBoot+Vue实现简单用户管理平台第一篇(后端接口设计)

&#x1f680; 注重版权&#xff0c;转载请注明原作者和原文链接&#x1f96d; 作者&#xff1a;Yuan-Programmer&#x1f34e; 主页&#xff1a;https://blog.csdn.net/weixin_47971206/article/details/121368075?spm1001.2014.3001.5502&#x1f349; 进来的小伙伴点点赞呀…

nuxt3:我们开始吧-开发-配置-部署

一、背景介绍 2022 年 11 月 16 日&#xff0c;全球最大的 Nuxt 会议 Nuxt Nation 2022 在线举行&#xff0c;并正式发布了 Nuxt.js 3.0 的第一个稳定版本。Nuxt 3 是基于 Vite、Vue3 和 Nitro 的 Nuxt 框架的现代重写&#xff0c;具有一流的 Typescript 支持&#xff0c;是两年…

前端基础从头学——VsCode使用教程+html基础(入门篇)

作者简介&#xff1a;hello&#xff01;大家好&#xff0c;初学前端知识&#xff0c;请多多指教。 希望我的分享能够帮助到更多的人&#xff0c;如果觉得我的分享有帮助的话&#xff0c;请大家一键三连支持一下哦~ 文章目录前言一、VsCode编辑器使用教程1、VsCode的下载与安装2…

HTML+CSS+JS+Jquery+练手项目+...合集(前端学习必备,持续更新中...)

非常实用的教程案例&#xff0c;均有详细的步骤讲解&#xff0c;不懂得可以私信博主&#xff0c;看到就会回的&#xff01;未来将继续更新Vue&#xff0c;React等更多前端知识&#xff0c;欢迎收藏关注&#xff01; 文章目录一、HTML二、CSS三、JavaScript四、jQuery五、 前端项…

PromiseA+规范之手写Promise

前言 1、Promise 的意义&#xff1f; 在javascript的世界中&#xff0c;所有代码都是单线程执行的&#xff0c;由于这个“缺陷”&#xff0c;导致JavaScript的所有网络操作&#xff0c;浏览器事件&#xff0c;都必须是异步执行。Ajax可以解决这个问题&#xff0c;但是并不好复用…