使用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 相关文章推荐
利用ASP发送和接收XML数据的处理方法与代码
Nov 13 Javascript
js中运算符&amp;&amp; 和 || 的使用记录
Aug 21 Javascript
JavaScript中的pow()方法使用详解
Jun 15 Javascript
jQuery遮罩层效果实例分析
Jan 14 Javascript
bootstrap警告框示例代码分享
May 17 Javascript
jQuery Validate格式验证功能实例代码(包括重名验证)
Jul 18 jQuery
JavaScript中运算符规则和隐式类型转换示例详解
Sep 06 Javascript
JS排序算法之冒泡排序,选择排序与插入排序实例分析
Dec 13 Javascript
在小程序中使用腾讯视频插件播放教程视频的方法
Jul 10 Javascript
Node.js命令行/批处理中如何更改Linux用户密码浅析
Jul 22 Javascript
详解如何使用Node.js实现热重载页面
May 06 Javascript
vue项目多环境配置(.env)的实现
Jul 21 Vue.js
微信小程序在其他页面监听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
phpmyadmin3 安装配置图解教程
2012/03/29 PHP
Drupal7连接多个数据库及常见问题解决
2014/03/02 PHP
php初始化对象和析构函数的简单实例
2014/03/11 PHP
PHP设计模式之迭代器模式
2016/06/17 PHP
Laravel 框架返回状态拦截代码
2019/10/18 PHP
TP5框架实现自定义分页样式的方法示例
2020/04/05 PHP
javascript 节点遍历函数
2010/03/28 Javascript
JavaScript表达式:URL 协议介绍
2013/03/10 Javascript
node.js中的console.trace方法使用说明
2014/12/09 Javascript
JavaScript中的this机制
2016/01/30 Javascript
JavaScript简单实现鼠标移动切换图片的方法
2016/02/23 Javascript
js简单判断移动端系统的方法
2016/02/25 Javascript
Bootstrap表单组件教程详解
2016/04/26 Javascript
javascript实现用户点击数量统计
2016/12/25 Javascript
vue2.0 中#$emit,$on的使用详解
2017/06/07 Javascript
JS失效 提示HTML1114: (UNICODE 字节顺序标记)的代码页 utf-8 覆盖(META 标记)的冲突的代码页 utf-8
2017/06/23 Javascript
详解基于Angular4+ server render(服务端渲染)开发教程
2017/08/28 Javascript
jquery实现倒计时小应用
2017/09/19 jQuery
JavaScript对象拷贝与Object.assign用法实例分析
2018/06/20 Javascript
解决vue项目使用font-awesome,build后路径的问题
2018/09/01 Javascript
JS使用栈判断给定字符串是否是回文算法示例
2019/03/04 Javascript
微信小程序地图绘制线段并且测量(实例代码)
2020/01/02 Javascript
手把手教你实现 Promise的使用方法
2020/09/02 Javascript
Python中使用urllib2防止302跳转的代码例子
2014/07/07 Python
浅谈python中的实例方法、类方法和静态方法
2017/02/17 Python
Python实现计算文件MD5和SHA1的方法示例
2019/06/11 Python
Pandas库之DataFrame使用的学习笔记
2019/06/21 Python
python实现用户名密码校验
2020/03/18 Python
python 邮件检测工具mmpi的使用
2021/01/04 Python
客户表扬信范文
2014/01/10 职场文书
如何写一份好的英文求职信
2014/03/19 职场文书
买卖合同纠纷代理词
2015/05/25 职场文书
罗马假日观后感
2015/06/08 职场文书
地震捐款简报
2015/07/21 职场文书
婚礼答谢词范文
2015/09/29 职场文书
晶体管单管来复再生式收音机
2021/04/22 无线电