vue2.0 组件通信

1.index.html  子组件直接修改父组件的数据

组件通讯:

  vm.$emit();

  vm.$on();

父组件和子组件:

子组件想要拿到父组件数据:

  通过 props

  之前,子组件可以更改父组件信息,可以是同步 sync

  现在,不允许直接给父级的数据,做赋值操作

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
	<script src="vue.js"></script>
	<script>
		window.onload = function() {
			new Vue({
				el:‘#box‘,
				data:{
					a:‘我是父组件‘
				},
				components:{
					‘child-com‘:{
						props:[‘msg‘],
						template:‘#child‘,
						methods:{
							change(){
								this.msg = ‘被更改了‘;
							}
						}
					}
				}
			});
		}
	</script>
</head>
<body>
	<template id="child">
		<div>
			<span>我是子组件</span>
			<input type="button" value="按钮" @click="change" />
			<strong>{{msg}}</strong>
		</div>
	</template>

	<div id="box">
		父级:-> {{a}}
		<br/>
		<child-com :msg="a"></child-com>
	</div>
</body>
</html>

点击按钮之前

点击按钮之后

原因

2.问题,就想更改:

a).父组件每次传一个对象给子组件,对象之间是引用的

index2.html

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
	<script src="vue.js"></script>
	<script>
		window.onload = function() {
			new Vue({
				el:‘#box‘,
				data:{
					giveData:{
						a:‘我是父组件数据‘
					}
				},
				components:{
					‘child-com‘:{
						props:[‘msg‘],
						template:‘#child‘,
						methods:{
							change(){
								// this.msg = ‘被更改了‘;
								this.msg.a = ‘被更改了‘;
							}
						}
					}
				}
			});
		}
	</script>
</head>
<body>
	<template id="child">
		<div>
			<span>我是子组件</span>
			<input type="button" value="按钮" @click="change" />
			<strong>{{msg.a}}</strong>
		</div>
	</template>

	<div id="box">
		父级:-> {{giveData.a}}
		<br/>
		<child-com :msg="giveData"></child-com>
	</div>
</body>
</html>

点击按钮之前:

点击按钮之后:

3. b).只是不报错,mounted中转

index3.html

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
	<script src="vue.js"></script>
	<script>
		window.onload = function() {
			new Vue({
				el:‘#box‘,
				data:{
					a:‘我是父组件数据‘
				},
				components:{
					‘child-com‘:{
						data(){
							return{
								b:‘‘
							}
						},
						props:[‘msg‘],
						template:‘#child‘,
						mounted(){
							this.b = this.msg;
						},
						methods:{
							change(){
								// this.msg = ‘被更改了‘;
								// this.msg.a = ‘被更改了‘;
								this.b = ‘被更改了‘;
							}
						}
					}
				}
			});
		}
	</script>
</head>
<body>
	<template id="child">
		<div>
			<span>我是子组件</span>
			<input type="button" value="按钮" @click="change" />
			<strong>{{b}}</strong>
		</div>
	</template>

	<div id="box">
		父级:-> {{a}}
		<br/>
		<child-com :msg="a"></child-com>
	</div>
</body>
</html>

点击按钮之前:

点击按钮之后:

4,可以单一事件管理组件通信:vuex

var Event = new Vue();

Event.$emit(事件名称,数据);

Event.$on(事件名称,function(data){

// data

}.bind(this));

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
	<script src="vue.js"></script>
	<script>
		// 先准备一个空的实例对象 (必须是全局的)
		var Event = new Vue();

		// A组件
		var A = {
			template:`
				<div>
					<span>我是A组件</span> -> {{a}}
					<input type="button" value="把A数据给C" @click="send" />
				</div>
			`,
			methods:{
				send(){
					// 通过 $emit 传递数据
					Event.$emit(‘a-msg‘,this.a);
				}
			},
			data(){
				return{
					a:‘我是a数据‘
				}
			}
		};
		// B组件
		var B = {
			template:`
				<div>
					<span>我是B组件</span> -> {{b}}
					<input type="button" value="把B数据给C"  @click="send" />
				</div>
			`,
			methods:{
				send(){
					// 通过 $emit 传递数据
					Event.$emit(‘b-msg‘,this.b);
				}
			},
			data(){
				return{
					b:‘我是b数据‘
				}
			}
		};
		// C组件
		var C = {
			template:`
				<div>
					<h3>我是C组件</h3>
					<span>接收过来的A的数据为:{{a}}</span>
					<br/>
					<span>接收过来的B的数据为:{{b}}</span>
				</div>
			`,
			data(){
				return{
					a:‘‘,
					b:‘‘
				}
			},
			mounted(){
				// // 定义变量,存储this,防止this指针发生偏转
				// var _this = this;

				// // 通过 $on 接收数据
				// Event.$on(‘a-msg‘,function(a){
				// 	_this.a = a;
				// });

				// 接收A组件的数据
				Event.$on(‘a-msg‘,function(a){
					this.a = a;
				}.bind(this)); // 函数上绑定this防止指针偏转

				// 接收B组件的数据
				Event.$on(‘b-msg‘,function(b){
					this.b = b;
				}.bind(this)); // 函数上绑定this防止指针偏转
			}
		};

		window.onload = function(){
			new Vue({
				el:‘#box‘,
				components:{
					‘com-a‘:A,
					‘com-b‘:B,
					‘com-c‘:C
				}
			});
		}
	</script>
</head>
<body>
	<div id="box">
		<com-a></com-a>
		<com-b></com-b>
		<com-c></com-c>
	</div>
</body>
</html>

点击按钮之前:

点击  ‘把A数据给C‘  按钮

点击  ‘把B数据给C’  按钮

5.debounce 废弃

  vue2.0-> loadash

    _.debounce(fn,时间) // 延长执行

.

时间: 2024-12-12 23:05:36

vue2.0 组件通信的相关文章

vue2.0组件通信各种情况总结与实例分析

Props在vue组件中各种角色总结 在Vue中组件是实现模块化开发的主要内容,而组件的通信更是vue数据驱动的灵魂,现就四种主要情况总结如下: 使用props传递数据---组件内部 //html <div id="app1"> <i>注意命名规定:仅在html内使用my-message</i> <child my-message="组件内部数据传递"></child> </div> //js

通信vue2.0组件

vue2.0组件通信各种情况总结与实例分析 Props在vue组件中各种角色总结 在Vue中组件是实现模块化开发的主要内容,而组件的通信更是vue数据驱动的灵魂,现就四种主要情况总结如下: 使用props传递数据---组件内部 //html <div id="app1"> <i>注意命名规定:仅在html内使用my-message</i> <child my-message="组件内部数据传递"></child&

vue2.0组件之间的传值--新入坑,请指教

prop down   emit up 嘿嘿    如果是第一次接触vue2.0组件传值的肯定很疑惑,这是什么意思(大神总结的,我也就是拿来用用) "down"->指的是下的意思,即父组件向子组件传值,用props:"up"->指的是上的意思,即子组件想父组件传值,用emit. 1.子组件向父组件的传值: Child.vue <template> <div class="child"> <h1>子组

Vue2.0组件注册

//全局注册: Vue.component("my-component",{ template:'<div>A custom component!</div>' }); /*交换位置会报错----创建组件必须在根实例化之前*/ //创建根实例: new Vue({ el:"#app" }) --------- //局部注册: new Vue({ el: "#app1", components: { // <my-zu

Vue2.0组件之间通信

Vue中组件这个特性让不少前端er非常喜欢,我自己也是其中之一,它让前端的组件式开发更加合理和简单.笔者之前有写过一篇Vue2.0子父组件通信,这次我们就来聊一聊平级组件之间的通信. 首先我们先搭好开发环境,我们先得装好git和npm这两个工具(如果有不清楚的同学请自行百度哦) 环境搭建步骤: 打开git ,运行 npm install --global vue-cli 这是安装vue的命令行 vue init webpack vue-demo 这是vue基于webpack的模板项目 cd vu

vue29-vue2.0组件通信_recv

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>智能社--http://www.zhinengshe.com</title> <meta name="viewport" content="width=device-width, initial-scale=1.0, ma

Vue2.0组件间数据传递

Vue1.0组件间传递 使用$on()监听事件: 使用$emit()在它上面触发事件: 使用$dispatch()派发事件,事件沿着父链冒泡: 使用$broadcast()广播事件,事件向下传导给所有的后代 Vue2.0后$dispatch(),$broadcast()被弃用,见https://cn.vuejs.org/v2/guide/migration.html#dispatch-和-broadcast-替换 1,父组件向子组件传递场景:Father上一个输入框,根据输入传递到Child组件

vue2.0组件快速入门

前言 最近开始在学vue相关的内容.组件这章的内容比较多.看了http://www.cnblogs.com/keepfool/p/5625583.html这篇博客,博主总结的还比较全面也挺清晰,可是这篇博客的知识点跟实例都是基于vue 1.0版本的,所以参考这篇博客,我将vue2.0版本中的相关知识点做了一个总结.算是自己学习的一个笔记 什么是组件? 组件 (Component) 是 Vue.js 最强大的功能之一.组件可以扩展 HTML 元素,封装可重用的代码.我们可以将组件看成是封装好的HT

EventBus3.0 组件通信框架源码学习总结

一.初始化 EventBus的初始化虽然用了单例模式,但是构造方法居然是public修饰符,可能是应对项目中的多线操作. //单例模式,针对并发情况进行了双层判断 public static EventBus getDefault() { if (defaultInstance == null) { synchronized (EventBus.class) { if (defaultInstance == null) { defaultInstance = new EventBus(); }