在应用复杂时,推荐使用vue官网推荐的vuex,以下讨论简单SPA中的组件间传值。

一、路由传值

  路由对象如下图所示:

在跳转页面的时候,在js代码中的操作如下,在标签中使用<router-link>标签

this.$router.push({
name: 'routePage',
query/params: {
routeParams: params
}
})

 需要注意的是,实用params去传值的时候,在页面刷新时,参数会消失,用query则不会有这个问题。

 这样使用起来很方便,但url会变得很长,而且如果不是使用路由跳转的界面无法使用。取值方式分别为:this.$route.params.paramName和this.$route.query.paramName

   注:使用params传值,也可以做到页面刷新,参数不丢失,在命名路由时这样设置:

{
path: '/OrderDetail/:orderId/:type',
name: 'OrderDetail',
component: OrderDetail,
meta: {
title: '订单详情',
needAuth: true
}
}

使用时:

this.$router.push({name: 'OrderDetail', params: {orderId: id, type: 'buy'}})

这种方式会把路由导航到 /OrderDetail/22aead11a99c4c91aa2169ac17d0ddb5/booking 路径

参考:http://router.vuejs.org/zh-cn/essentials/named-routes.html

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

  通过下面的方法调用:

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

这样用起来比较灵活,但是容易造成代码耦合性太强,导致维护困难

三、采用eventBus.js传值---兄弟组件间的传值

eventBus.js

import Vue from 'Vue'

export default new Vue()

App.vue

<template>
<div id="app">
<secondChild></secondChild>
<firstChild></firstChild>
</div>
</template> <script>
import FirstChild from './components/FirstChild'
import SecondChild from './components/SecondChild' export default {
name: 'app',
components: {
FirstChild,
SecondChild,
}
}
</script>

FirstChild.vue

<template>
<div class="firstChild">
<input type="text" placeholder="请输入文字" v-model="message">
<button @click="showMessage">向组件传值</button>
<br>
<span>{{message}}</span>
</div>
</template>
<script>
import bus from '../assets/eventBus';
export default{
name: 'firstChild',
data () {
return {
message: '你好'
}
},
methods: {
showMessage () {
alert(this.message)
bus.$emit('userDefinedEvent', this.message);//传值
}
}
}
</script>

SecondChild.vue

<template>
<div id="SecondChild">
<h1>{{message}}</h1>
</div>
</template>
<script>
import bus from '../assets/eventBus';
export default{
name:'SecondChild',
data(){
return {
message: ''
}
},
mounted(){
var self = this;
bus.$on('userDefinedEvent',function(message){
self.message = message;//接值
});
}
}

四、通过localStorage或者sessionStorage来存储数据(参考:https://blog.csdn.net/qq_32786873/article/details/70853819)

setItem存储value
用途:将value存储到key字段
用法:.setItem( key, value)
代码示例:

sessionStorage.setItem("key", "value");  localStorage.setItem("site", "js8.in");

getItem获取value
用途:获取指定key本地存储的值
用法:.getItem(key)
代码示例:

var value = sessionStorage.getItem("key");  var site = localStorage.getItem("site");

vue中组件传值方式汇总的更多相关文章

  1. day 84 Vue学习六之axios、vuex、脚手架中组件传值

    Vue学习六之axios.vuex.脚手架中组件传值   本节目录 一 axios的使用 二 vuex的使用 三 组件传值 四 xxx 五 xxx 六 xxx 七 xxx 八 xxx 一 axios的 ...

  2. Vue中组件间通信的方式

    Vue中组件间通信的方式 Vue中组件间通信包括父子组件.兄弟组件.隔代组件之间通信. props $emit 这种组件通信的方式是我们运用的非常多的一种,props以单向数据流的形式可以很好的完成父 ...

  3. vue 父子组件传值以及方法调用,平行组件之间传值以及方法调用大全

    vue项目经常需要组件间的传值以及方法调用,具体场景就不说了,都知道.基本上所有的传值都可以用vuex状态管理来实现,只要在组件内监听vuex就好. vue常用的传值方式以及方法有: 1. 父值传子( ...

  4. Vue 创建组件的方式

    Vue 创建组件的方式 2018年08月07日 11:10:56 虔诚带着决然 阅读数:1015   版权声明:本文为博主原创文章,未经博主允许不得用做其他商业活动. https://blog.csd ...

  5. vue父子组件传值加例子

    例子:http://element-cn.eleme.io/#/zh-CN/component/form         上进行改的 父传子:用prop:子组件能够改变父组件的值,是共享的,和父操作是 ...

  6. Asp.net页面间传值方式汇总

    七种传值方式,分别是:URL传值,Session传值,Cookie传值,Server.Transfer传值,Application传值,利用某些控件的PostBackUrl属性和使用@Previous ...

  7. vue中组件之间的通信

    一.vue中组件通信的种类 父组件向子组件的通信 子组件向父组件的通信 隔代组件之间的通信 兄弟 组件 之间的通信 二.实现通信的方式  props vue自定义的事件 消息订阅与发布 vuex sl ...

  8. Vue中组件

    0828自我总结 Vue中组件 一.组件的构成 组件:由 template + css + js 三部分组成(.vue文件) 1)组件具有复用性 2) 复用组件时,数据要隔离 3) 复用组件时,方法不 ...

  9. 关于Vue父子组件传值(复杂数据类型的值)的细节点

    vue 父子组件传值是很常见的,多数情况下都是父传递给子的值是基础数据类型,如string,number,boolean, 当父组件值被修改时,子组件能够实时的作出改变. 如果父子传值的类型是复杂数据 ...

随机推荐

  1. WarTransportation TopCoder - 8404

    传送门 分析 我们高兴的发现数据范围特别小,所以我们可以随便搞.因为一共只砍掉一条路,所以我们先算出对于任意一个点如果将它的出边割掉一条则它到达终点的最坏情况的最短距离是多少,然后我们从终点向起点反着 ...

  2. Java中抽象类也能实例化.RP

    在Java中抽象类真的不能实例化么? 在学习的过程中,发现了一个问题,抽象类在没有实现所有的抽象方法前是不可以通过new来构建该对象的,但是抽象方法却是可以有自己的构造方法的.这样就把我搞糊涂了,既然 ...

  3. SDUT 3402 数据结构实验之排序五:归并求逆序数

    数据结构实验之排序五:归并求逆序数 Time Limit: 40MS Memory Limit: 65536KB Submit Statistic Problem Description 对于数列a1 ...

  4. Linux文件概念

    大多数资源,Linux都是以文件的方式来访问. Linux系统上的文件部分类型说明 –普通文件. •就是储存到磁盘上大家所操作的各种数据文件: –管道文件. •是一个从一端发送数据,从另一端接收数据的 ...

  5. ipmitool查询服务器功耗

    通过ipmitool查看服务器功耗 ipmitool -H $ip -I lanplus -U $user -P $password sdr elist | grep "Pwr Consum ...

  6. 前端文件加载 net::ERR_CONTENT_LENGTH_MISMATCH

    前端文章加载的时候有的时候图片不显示,有的时候文件加载不了,检查nginx设置都没有问题,最近才不显示,经检查是nginx服务器磁盘空间已满,将.log文件移动到其他位置 cp  /dev/null ...

  7. 【转】php通过curl跨域向asp.net服务器上传文件及参数

    转:http://blog.sina.com.cn/s/blog_13331dce50102vq32.html 这是一个由php通过调用asp.net接口向asp.net服务器post上传文件及参数并 ...

  8. 容器编排之Kubernetes1.7.6安装与配置

    kubernetes官网的安装教程是采用kubeadm init的方式,但是在生产环境当中,可能需要独自手动安装k8s,本文采用源码安装的方式,一步步搭建k8s的master节点和node节点. 系统 ...

  9. vue axios ajax引擎

    0.调用 1.axios api axios.request(config) axios.get(url[,config]) axios.delete(url[,config]) axios.head ...

  10. P2105 K皇后

    题意:$n*m$棋盘放置k个皇后,问几个格子不被攻击 1≤n,m≤20000,1≤k≤500 开set判重暴力$O(n*k)$然而,setMLE了QAQ 正解确实是$O(n*k)$的 以hang[i] ...