最近公司的一个项目中使用 Vue 2.0 + element UI 实现一个后台管理系统的前端部分,属于商城类型。其中我负责的部分有一项需要跳转页面,由于跳转前的页面是多个组件构成的,所以在跳转页面的时候,并不适合用传统的 href,于是使用路由进行传值。在这里分享一下开发的过程。

  如何引入路由,可查看官方文档:https://router.vuejs.org/zh/installation.html,也可自行搜索。

  一、我采用的实现方法

    

    图 1 - 1 跳转前的页面.png

    给每一行的按钮绑定点击事件,并将每一行的数据携带上。

    

    图 1 - 2 按钮的点击事件.png

    

    图 1 - 3 跳转前的页面所对应的响应事件.png

    其中 path 所对应的 '/order/orderDetails' 我已经在 src/router/index.js 中注册声明,如下图:

    

    图 1 - 4 在 src/router/index.js 中注册声明.png

    点击“订单详情”按钮后,页面跳转,此时的 URL 为:

    

    图 1 - 5 URL.png

    可以看到,这边是把需要的参数写入 URL 了,然后在接收页接收数据:

    

    图 1 - 6 接收页接收数据.png

    此时刷新页面,数据依然存在,因为 URL 没有改变,接收页直接从 URL 截取参数去接口中拿数据,故刷新页面不会影响接收页的数据。

  二、介绍一下先前采用的方法

    拿着整个订单对象用路由传,实际上能传成功,但是会在刷新页面后拿不到数据,观察 URL 发现显示的是 Object ,可能是刷新后解析问题导致拿不到数据。

    具体的采用可参照官方文档:https://router.vuejs.org/zh/guide/essentials/navigation.html,我当时也是照着文档写的,获取参数可以用 this.$route.query。

  

  三、其他方法

    其实跳转页面传值的方法有很多,就我所听过的就还有以下方法,不过我没有实验过,有兴趣的可以自行尝试:

    1、使用 router-link 也会在刷新页面后丢失数据

   <router-link :to="{ name: 'user', params: { userId: 123 }}">User</router-link>

    2、通过 $parent, $chlidren 等方法调取用层级关系的组件内的数据和方法

       通过下面的方法调用,虽然用起来比较灵活,但是容易造成代码耦合性高,导致后期维护困难。

   this.$parent.$data.id  // 获取父元素data中的id
   this.$children.$data.id // 获取父元素data中的id

    3、通过 eventBus 传递数据

       使用前可以在全局定义一个 eventBus

   window.eventBus = new Vue();

       在需要传递参数的组件中,定义一个 emit 发送需要传递的值,键名可以自己定义(可以为对象)

   eventBus.$emit('eventBusName', id);

       在需要接受参数的组件重,用 on 接受该值(或对象)

   eventBus.$on('eventBusName', function(val) {<br>   console.log(val)<br>})

       最后记住要在 beforeDestroy() 中关闭这个 eventBus

   eventBus.$off('eventBusName');

    4、借道 sessionStorage / localStorage

       localStorage与sessionStorage存储的必需是字符串,而获取的交互数据是Object,所以我们一般要把JSON格式的字符串转成字符。

   JSON.stringify();  // 将Json对象转为字符串。

   JSON.parse();      // 将字符串转为json格式。

    

Vue 编程之路(二)——跳转页面传值的更多相关文章

  1. Vue 编程之路(三)—— Vue 中子组件在父组件的 v-for 循环里,父组件如何调取子组件的事件

    (标题的解决方案在第二部分) 最近公司的一个项目中使用 Vue 2.0 + element UI 实现一个后台管理系统的前端部分,属于商城类型. 一.前期思路: 其中在“所有订单”页面,UI 给的设计 ...

  2. jquery 跳转页面传值的问题

    关于 跳转页面传值的问题 1. 目前最多的是使用 ajax 方法 //举例 ajax 传值,举例: $.ajax({ type : "post", url : "save ...

  3. Vue移动端焦点状态跳转页面,焦点和键盘不消失的问题

    问题:input搜索,在移动端焦点状态跳转页面,焦点不失焦,还在跳转后的页面闪烁,且键盘不消失 //主动隐藏键盘 document.getElementById('inputSearch').blur ...

  4. Web端 页面跳转 页面传值

    要把  Default.aspx 页面    TextBox1中的值    传值到   Default.aspx   Label上去 C#服务端跳转页面 Response    响应请求对象 Redi ...

  5. vue路由传参并跳转页面

    在vue项目中参数的传递可以使用本地缓存或者Vuex,那么vue能不能像小程序一样路由传参呢,显然是可以的而且非常简单 方式一:query传参 //传参 go(){ that.$router.push ...

  6. Vue 编程之路(一)——父子组件之间的数据传递

    最近公司的一个项目中使用 Vue 2.0 + element UI 实现一个后台管理系统的前端部分,属于商城类型.其中部分页面是数据管理页,所以有很多可以复用的表格,故引入自定义组件.在这里分享一下开 ...

  7. vue跳转页面传值怎么传?

    这是路由跳转: this.$router.push( { name: 'holderResult', params: { meetingId:self.$route.params.meetingId} ...

  8. vue动态添加路由,跳转页面时,页面报错路由重复:vue-router.esm.js?8c4f:16 [vue-router] Duplicate named routes definition: { name: "Login", path: "/login" }

    之前用了一个vue-element-admin做了一个小项目,里面用到了动态添加路由,动态展示侧边栏, 当我切换页面时,控制台总是警告提示路由重复,连续跳转几次页面后,控制台就被这些警告占满了, 于是 ...

  9. vue tab栏缓存解决跳转页面后返回的状态保持

    <!DOCTYPE html> <html lang="zh-cn"> <head> <meta charset="UTF-8& ...

随机推荐

  1. MVC学习九:MVC 特性本质

    一.特性的本质就是:对属性.方法.类加特性,本质就是new 一个特性类对象赋值给属性.方法.类. 可以通过反射的方式取得特性的值,代码如下: ①自定义特性 public class MyAttribu ...

  2. C#发送邮件类库

    public class Email { #region 发送邮件 /// <summary> /// 发送邮件 /// </summary> /// <param na ...

  3. Office365学习笔记—Xslt自定义列表视图

    1,在Office365中需要添加自定义的视图!用Spd添加视图,这儿我添加一个testView! (1)打开testView.aspx将</ZoneTemplate>节点中的内容全部删除 ...

  4. Oracle树形结构数据-相关知识总结

    Oracle树形结构数据--基本知识 1.数据组成 2.基本查询 2.1.查询某节点及该节点下的所有子孙节点 SELECT   *      FROM QIANCODE.TREE_TABLE_BASI ...

  5. phpStudy环境安装SSL证书教程(apache)

    https://cloud.tencent.com/product/ssl 此链接是检测域名 证书的可以检测一下 下面是证书配置 小白呢亲测 作为PHP程序员,我们一定要学会使用phpStudy环境集 ...

  6. 浅谈async函数await用法

    今天状态不太好,睡久了懵一天. 以前只是了解过async函数,并还没有很熟练的运用过,所以先开个坑吧,以后再结合实际来更新下,可能说的有些问题希望大家指出. async和await相信大家应该不陌生, ...

  7. linux系统基础之-----磁盘结构(基于centos7.4 1708)

  8. MQTT的学习之Mosquitto安装&使用(1)

    Mosquitto是一个实现了MQTT3.1协议的代理服务器,由MQTT协议创始人之一的Andy Stanford-Clark开发,它为我们提供了非常棒的轻量级数据交换的解决方案.本文的主旨在于记录M ...

  9. python网络编程之进程

    一.什么是进程 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础.在早期面向进程设计的计算机结构中,进程是程序的基本执行实 ...

  10. Leecode刷题之旅-C语言/python-202快乐数

    /* * @lc app=leetcode.cn id=202 lang=c * * [202] 快乐数 * * https://leetcode-cn.com/problems/happy-numb ...