在应用复杂时,推荐使用vue官网推荐的vuex,以下讨论简单SPA(single-page application 简称为 SPA)中的组件间传值。

一、路由传值

  路由对象如下图所示:

  

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

1
2
3
4
5
6
this.$router.push({
name: 'routePage',
query/params: {
routeParams: params
}
 需要注意的是,实用params去传值的时候,在页面刷新时,参数会消失,用query则不会有这个问题。  这样使用起来很方便,但url会变得很长,而且如果不是使用路由跳转的界面无法使用。取值方式分别为:this.$route.params.paramName和this.$route.query.paramName 注:使用params传值,也可以做到页面刷新,参数不丢失,在命名路由时这样设置: [javascript] view plain copy
{
path: '/OrderDetail/:orderId/:type',
name: 'OrderDetail',
component: OrderDetail,
meta: {
title: '订单详情',
needAuth: true
}
}
使用时:
[javascript] view plain copy
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等方法调取用层级关系的组件内的数据和方法   通过下面的方法调用: 1
2
this.$parent.$data.id //获取父元素data中的id
this.$children.$data.id //获取父元素data中的id
  这样用起来比较灵活,但是容易造成代码耦合性太强,导致维护困难 1,父组件向子组件传递场景:Father上一个输入框,根据输入传递到Child组件上。 父组件: 复制代码
<template>
<div>
<input type="text" v-model="msg">
<br>
//将子控件属性inputValue与父组件msg属性绑定
<child :inputValue="msg"></child>
</div>
</template>
<style> </style>
<script>
export default{
data(){
return {
msg: '请输入'
}
},
components: {
child: require('./Child.vue')
}
}
</script
复制代码
子组件: 复制代码
<template>
<div>
<p>{{inputValue}}</p>
</div>
</template>
<style> </style>
<script>
export default{
props: {
inputValue: String
}
}
</script>
复制代码
2,子组件向父组件传值场景:子组件上输入框,输入值改变后父组件监听到,弹出弹框 父组件: 复制代码
<template>
<div>
//message为子控件上绑定的通知;recieveMessage为父组件监听到后的方法
<child2 v-on:message="recieveMessage"></child2>
</div>
</template>
<script>
import {Toast} from 'mint-ui'
export default{
components: {
child2: require('./Child2.vue'),
Toast
},
methods: {
recieveMessage: function (text) {
Toast('监听到子组件变化'+text);
}
}
}
</script>
复制代码
子组件: 复制代码
<template>
<div>
<input type="text" v-model="msg" @change="onInput">
</div>
</template>
<script>
export default{
data(){
return {
msg: '请输入值'
}
},
methods: {
onInput: function () {
if (this.msg.trim()) {
this.$emit('message', this.msg);
}
}
}
}
</script> 还有一个子组件使用父组件数据的方法:prop Prop
子组件想要使用父组件的数据,我们需要通过子组件的 props 选项来获得父组件传过来的数据。以下我使用在 .vue 文件中的格式来写例子。
如何传递数据
在父组件 father.vue 中引用子组件 child.vue,把 name 的值传给 child 组件。
? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 <template> <div class="app"> // message 定义在子组件的 props 中 <child :message="name"></child> </div> </template> <script> import child from './child.vue'; export default
{ components: { child }, data() { return
{ name: 'linxin' } } } </script>
在子组件 child.vue 中的 props 选项中声明它期待获得的数据
? 1 2 3 4 5 6 7 8 9 <template> <span>Hello {{message}}</span> </template> <script> export default
{ // 在 props 中声明获取父组件的数据通过 message 传过来 props: ['message'] } </script>
那么页面中就会渲染出:Hello linxin
单向数据流
当父组件的 name 发生改变,子组件也会自动地更新视图。但是在子组件中,我们不要去修改 prop。如果你必须要修改到这些数据,你可以使用以下方法:
方法一:把 prop 赋值给一个局部变量,然后需要修改的话就修改这个局部变量,而不影响 prop
? 1 2 3 4 5 6 7 8 9 export default
{ data(){ newMessage: null }, props: ['message'], created(){ this.newMessage = this.message; } }
方法二:在计算属性中对 prop 进行处理
? 1 2 3 4 5 6 7 8 export default
{ props: ['message'], computed{ newMessage(){ return
this.newMessage + ' 哈哈哈'; } } } 三、通过eventBus传递数据(自定义事件)   使用前可以在全局定义一个eventBus 1
window.eventBus = new Vue();
  在需要传递参数的组件中,定义一个emit发送需要传递的值,键名可以自己定义(可以为对象) 1
eventBus.$emit('eventBusName', id);
  在需要接受参数的组件重,用on接受该值(或对象) 1
//val即为传递过来的值
eventBus.$on('eventBusName', function(val) {
 console.log(val)
})
  最后记住要在beforeDestroy()中关闭这个eventBus 1
eventBus.$off('eventBusName');
四、通过localStorage或者sessionStorage来存储数据(参考:http://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");
链接:http://www.cnblogs.com/ygtq-island/p/6728137.html

  

vuejs 组件通讯的更多相关文章

  1. Omi教程-组件通讯

    组件通讯 Omi框架组建间的通讯非常遍历灵活,因为有许多可选方案进行通讯: 通过在组件上声明 data-* 传递给子节点 通过在组件上声明 data 传递给子节点 父容器设置 childrenData ...

  2. Angular4 组件通讯方法大全

    组件通讯,意在不同的指令和组件之间共享信息.如何在两个多个组件之间共享信息呢. 最近在项目上,组件跟组件之间可能是父子关系,兄弟关系,爷孙关系都有.....我也找找了很多关于组件之间通讯的方法,不同的 ...

  3. 【Vue】Vue中的父子组件通讯以及使用sync同步父子组件数据

    前言: 之前写过一篇文章<在不同场景下Vue组件间的数据交流>,但现在来看,其中关于“父子组件通信”的介绍仍有诸多缺漏或者不当之处, 正好这几天学习了关于用sync修饰符做父子组件数据双向 ...

  4. vue组件通讯方法汇总(在不使用vuex的情况下)

    前三种是父子组件通讯,最后一种是平级组件.

  5. Omi教程-组件通讯攻略大全

    组件通讯 Omi框架组建间的通讯非常遍历灵活,因为有许多可选方案进行通讯: 通过在组件上声明 data-* 传递给子节点 通过在组件上声明 data 传递给子节点 (支持复杂数据类型的映射) 父容器设 ...

  6. Omi框架学习之旅 - 通过对象实例来实现组件通讯 及原理说明

    组件通讯不是讲完了吗(上帝模式还没讲哈),怎么又多了种方式啊. 你484傻,多一种选择不好吗? 其实这个不属于组件通讯啦,只是当父组件实例安装和渲染完毕后,可以执行installed这个方法(默认是空 ...

  7. Angular6 学习笔记——组件详解之组件通讯

    angular6.x系列的学习笔记记录,仍在不断完善中,学习地址: https://www.angular.cn/guide/template-syntax http://www.ngfans.net ...

  8. [转载]Angular4 组件通讯方法大全

    组件通讯,意在不同的指令和组件之间共享信息.如何在两个多个组件之间共享信息呢. 最近在项目上,组件跟组件之间可能是父子关系,兄弟关系,爷孙关系都有.....我也找找了很多关于组件之间通讯的方法,不同的 ...

  9. Vue组件通讯

    Vue最常用的组件通讯有三种:父->子组件通讯.子->父组件通讯,兄弟组件通讯.(template用的pug模板语法) 1.父->子组件通讯 父->子组件通讯,是通过props ...

随机推荐

  1. 第一次调用从server获取Cookie

    System.setProperty("javax.net.ssl.trustStore", certPath); public String getCookieString(St ...

  2. remote staging type or host is not specified

    idea在tomcat配置中显示此错误 配置下面选上就好了

  3. python中len 小练习:获取并输出集合中的索引及对应元素

    len()用来获取长度.字节等数值 1 a = ["hello", "world", "dlrb"] 2 b = len(a) 3 for ...

  4. stage的划分

    stage的划分是以shuffle操作作为边界的,遇到一个宽依赖就分一个stage 一个Job会被拆分为多组Task,每组任务被称为一个Stage就像Map Stage, Reduce Stage.S ...

  5. java位运算(操作)的使用

    位操作是程序设计中对位模式按位或二进制数的一元和二元操作. 在许多古老的微处理器上, 位运算比加减运算略快, 通常位运算比乘除法运算要快很多. 在现代架构中, 情况并非如此:位运算的运算速度通常与加法 ...

  6. 利用STM32CubeMX来生成USB_HID_host工程

    修改时钟(备注这边使用25mhz的主晶振) 选择debug_level等级为3

  7. NetBeans 8以后版本无法连接git服务器

    因为目前的git服务器的密钥加密基本都是256位的,而NetBeans带的jre环境的加密限制在基本的128位加密,从而导致无法和git服务器通信 解决办法 下载Java Cryptography E ...

  8. Dubbo的优化 --- 开发时使用

    开发时的三个优化: 1.开发者在本地开发的时候启动Dubbo比较麻烦,所以采用直接连接的配置: 2.开发者本地开发时会打断点调试,会超过Dubbo默认的超时时间1s,所以需要全局设置超时时间: 3.开 ...

  9. MySQL创建只读账号

    应用场景:只要公司有数据团队的,那免不了让这帮家伙把全公司的数据库数据都摸一遍,但是要是直接把root用户给了他们,未免有点危险,于是只能给这帮人设权限,一般而言,他们只是做读操作,既然做读操作,那么 ...

  10. google event

    一目了然,也不用多说了,随便记录下,内部实现基于观察者模式 TestEvent public class TestEvent { private final int message; public T ...