使用vue-router在Vue页面之间传递数据的方法


Posted in Javascript onJuly 15, 2019

前言

几周前,我写了关于 Vue 路由的使用和在 Vue 页面导航的文章。这是在应用程序中探索的一个基本例子。

通常,在将导航构建到应用程序中时,您会发现需要将数据从一个页面传递到另一个页面。(不通顺)例如,您遵循 master-detail 模式,其中您有一个数据列表,通过更深入地挖掘可以获得关于列表中特定项的更多信息。

我们将学习如何使用路由和 URL参数以及查询参数在 Vue 页面之间传递数据。

如果你还没有读过我之前的教程或者不熟悉 vue-router 库,我建议你温习一下。

利用 URL 参数在不同页面中传递数据

假设您有一个 web 应用程序,它显示从某个数据库获得的用户列表。这个列表可能只包含姓名信息,但是数据库中的数据可能包含更多的信息,例如地址、电话等。

在典型的场景中,我们使用主键或其他标识符维护这个用户列表,并用于在请求详细信息时查询数据库时。这样的值可非常合适作为 URL 参数在不同页面传递。

为此,目标页面需要获取到 URL 参数。在前面的教程基础上,我们可以将项目 src/router/index.js 中的文件更改为如下所示

import Vue from 'vue'
import Router from 'vue-router'
import Page1 from '@/components/page1'
import Page2 from '@/components/page2'

Vue.use(Router)

export default new Router({
  routes: [
    {
      path: "/",
      redirect: {
        name: "Page1"
      }
    },
    {
      path: '/page1',
      name: 'Page1',
      component: Page1
    },
    {
      path: '/page2/:id',
      name: 'Page2',
      component: Page2
    }
  ]
})

注意,Page2 的路由中路径中包含一个 :id。这个冒号表示我们正在处理一个变量

打开项目src/components/page1.vue文件,将<template>块改为下面的样子,获取 URL 中的参数

<template>
  <div class="hello">
    <h1>{{ msg }}</h1>
    <router-link :to="{ name: 'Page2', params: { id: 1234 } }">Navigate to Page2</router-link>
  </div>
</template>

在上面的代码片段中,我们选择将参数传递给指定的路由。该 id 将匹配先前在路由定义的参数。您可以定义多个参数,但是要小心,因为它们很容易造成问题

在接收端,我们需要弄清楚如何获取和处理路由参数。

打开 src/components/page2.vue 文件:

<template>
  <div class="hello">
    <h1>{{ msg }}, your id is {{ id }}</h1>
    <a style="cursor: pointer; text-decoration: underline" v-on:click="navigate()">Navigate to Page1</a>
  </div>
</template>

<script>
  import router from '../router'

  export default {
    name: 'Page2',
    data () {
      return {
        id: 0,
        msg: 'Hey Nic Raboy'
      }
    },
    created() {
      this.id = this.$route.params.id;
    },
    methods: {
      navigate() {
        router.go(-1);
      }
    }
  }
</script>

<style scoped>
  h1, h2 {
    font-weight: normal;
  }

  ul {
    list-style-type: none;
    padding: 0;
  }

  li {
    display: inline-block;
    margin: 0 10px;
  }

  a {
    color: #42b983;
  }
</style>

与之前的例子相比,我们在上面的组件增加了一些内容

首先,您将注意到我们正在data方法中初始化一个id值。这是为了防止出现任何未定义的错误

每次创建组件时,Vue 都会调用其生命周期钩子的 Created 方法。在Created方法中,我们从$route获得传递的id值,并将其设置为局部变量。这个本地id变量在<template>块中

但是,如果我们需求传递更复杂的参数或者是可选参数,这时候就该换一种方式了

利用 Query 参数传递数据

Vue 中的查询参数与路由器参数的工作原理类似,但它们不是必需的,而且你并不需要事先修改路由

回到之前的src/components/page1.vue 文件上,其中 <template> 块如下:

<template>
  <div class="hello">
    <h1>{{ msg }}</h1>
    <router-link :to="{ name: 'Page2', params: { id: 1234 }, query: { debug: true }}">Navigate to Page2</router-link>
  </div>
</template>

注意,这一次我们将传递URL或路由器参数以及一组新的Query参数。这些Query参数可以是任意数量的键值对

我们来看一下在接受端怎么处理这些 Query 参数

打开src/components/page2.vue 文件, 修改<script> 如下:

<script>
  import router from '../router'

  export default {
    name: 'Page2',
    data () {
      return {
        debug: false,
        id: 0,
        msg: 'Hey Nic Raboy'
      }
    },
    created() {
      this.id = this.$route.params.id;
      if(this.$route.query.debug) {
        this.debug = this.$route.query.debug;
      }
    },
    methods: {
      navigate() {
        router.go(-1);
      }
    }
  }
</script>

就像使用路由器参数一样,我们在 data 方法中初始化了一个占位符变量。在Created方法中,我们检查Query参数中是否存在 debug 参数,如果存在,将其设置为本地变量

<template>
  <div class="hello">
    <h1>{{ msg }}, your id is {{ id }}</h1>
    <p>Debug mode is currently set to {{ debug }}</p>
    <a style="cursor: pointer; text-decoration: underline" v-on:click="navigate()">Navigate to Page1</a>
  </div>
</template>

在上面的<template> 块中,我们展示debug变量

总结

本文你学到了如何使用 URL 参数和Query参数在 Vue 应用程序中的路由之间传递数据。如果你没有读过我上一篇关于页面导航的文章,你看到的一些东西可能没有多大意义。如果你还没有看过,我建议你去看看

via: https://www.thepolyglotdeveloper.com/2017/11/pass-data-between-routes-vuejs-web-application/

译者:Alex1996a

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
DOM基础教程之事件对象
Jan 20 Javascript
浅谈jQuery中height与width
Jul 06 Javascript
jquery zTree异步加载、模糊搜索简单实例分享
Mar 24 Javascript
JavaScript递归操作实例浅析
Oct 31 Javascript
Bootstrap基本组件学习笔记之按钮组(8)
Dec 07 Javascript
解决Vue页面固定滚动位置的处理办法
Jul 13 Javascript
webpack3之loader全解析
Oct 26 Javascript
react学习笔记之state以及setState的使用
Dec 07 Javascript
vue权限问题的完美解决方案
May 08 Javascript
微信小程序实现原生步骤条
Jul 25 Javascript
Element ui 下拉多选时新增一个选择所有的选项
Aug 21 Javascript
解决angular 使用原生拖拽页面卡顿及表单控件输入延迟问题
Apr 21 Javascript
微信小程序在其他页面监听globalData中值的变化
Jul 15 #Javascript
vue中filters 传入两个参数 / 使用两个filters的实现方法
Jul 15 #Javascript
微信小程序全局变量改变监听的实现方法
Jul 15 #Javascript
vue draggable resizable 实现可拖拽缩放的组件功能
Jul 15 #Javascript
微信小程序如何使用canvas二维码保存至手机相册
Jul 15 #Javascript
如何给element添加一个抽屉组件的方法步骤
Jul 14 #Javascript
详解vuex的简单todolist例子
Jul 14 #Javascript
You might like
php中Swoole的热更新实现代码实例
2021/03/04 PHP
javascript图片相似度算法实现 js实现直方图和向量算法
2014/01/14 Javascript
Jquery实现点击按钮,连续地向textarea中添加值的实例代码
2014/03/08 Javascript
关于JavaScript中name的意义冲突示例介绍
2014/05/29 Javascript
JavaScript 异常处理 详解
2015/02/06 Javascript
jQuery zTree树插件简单使用教程
2017/01/10 Javascript
基于Bootstrap框架菜鸟入门教程(推荐)
2017/09/17 Javascript
Vue2.0 实现单选互斥的方法
2018/04/13 Javascript
jQuery实现模糊查询的方法分析
2018/05/10 jQuery
详解webpack4.x之搭建前端开发环境
2019/03/28 Javascript
python3.5 tkinter实现页面跳转
2018/01/30 Python
python3+PyQt5重新实现QT事件处理程序
2018/04/19 Python
python3中zip()函数使用详解
2018/06/29 Python
Python中six模块基础用法
2019/12/08 Python
Python调用Windows API函数编写录音机和音乐播放器功能
2020/01/05 Python
Python使用uuid库生成唯一标识ID
2020/02/12 Python
python matplotlib imshow热图坐标替换/映射实例
2020/03/14 Python
如何在Python 游戏中模拟引力
2020/03/27 Python
Python利用PyPDF2库获取PDF文件总页码实例
2020/04/03 Python
调整Jupyter notebook的启动目录操作
2020/04/10 Python
Python HTMLTestRunner测试报告view按钮失效解决方案
2020/05/25 Python
使用CSS变量实现炫酷惊人的悬浮效果
2019/04/26 HTML / CSS
详解CSS3:overflow属性
2020/11/17 HTML / CSS
英国鞋类及配饰零售商:Kurt Geiger
2017/02/04 全球购物
娇韵诗俄罗斯官方网站:Clarins俄罗斯
2020/10/03 全球购物
C++:局部变量能否和全局变量重名
2014/03/03 面试题
软件测试工程师面试问题精选
2016/10/28 面试题
生物化学研究助理员求职信
2013/10/09 职场文书
2014新生大学四年计划书
2014/09/21 职场文书
教师批评与自我批评心得体会
2014/10/16 职场文书
2014年绩效考核工作总结
2014/12/11 职场文书
教师求职信怎么写
2015/03/20 职场文书
2015秋季运动会通讯稿
2015/07/18 职场文书
婚礼必备主持词范本!
2019/07/23 职场文书
导游词之沈阳植物园
2019/11/30 职场文书
MySQL 视图(View)原理解析
2021/05/19 MySQL