Vue父子组件传值小记

  • 组件传值的几种比较实用常见的方式
  • 一、props父->子传值
  • 1、父组件向子组件传值思路:
  • 2、父组件向子组件传值实现:
  • 01、引入:
  • 02、注册:
  • 03、定义待传递的全局变量:
  • 04、使用:
  • 05、子组件使用:
  • 二、emit子->父传值
  • 1、思路:
  • 2、实现:
  • 01、子组件定义函数:
  • 02、父组件接收:
  • 001、父组件引入子组件:
  • 002、父组件使用子组件:
  • 三、bus同级传值
  • 1、思路
  • 2、实现
  • 01、在main.js中挂载
  • 02、在组件中使用——发送方
  • 03、在组件中使用——接收方
  • 四、记录在全局变量中保存


组件传值的几种比较实用常见的方式

一、props父->子传值

1、父组件向子组件传值思路:

在父组件中引入子组件,然后用标签对的形式使用子组件,同时将父组件的值传给子组件。

2、父组件向子组件传值实现:

01、引入:
import sonComponent from "./sonComponent";
02、注册:
components:{
	sonComponent 
}
03、定义待传递的全局变量:
data(){
	return {
		values: 'hello'
	}
}
04、使用:
<son-component :values="values" />
05、子组件使用:

不用任何额外声明,直接this.调用即可

二、emit子->父传值

  • 注意:emit只能向父组件的自定义事件传值,不能像props那样灵活

1、思路:

一般来说,子组件向父组件用emit传值是通过函数实现的,所以,首先定义一个事件,当事件触发时,子组件向父组件发起emit

2、实现:

01、子组件定义函数:

子组件:

data(){
	return {
		msg: 'hello'
	}
},
methods:{
	testEmit(){
		// parentFunction是父组件用于接收数据的函数的函数名
		this.$emit('parentFunction',this.msg)
	}
}
02、父组件接收:
001、父组件引入子组件:
import sonComponent from './sonComponent'
components:{
	sonComponent
}
002、父组件使用子组件:
<son-component @parentFunction="updateMsg"/>

methods:{
	updateMsg(data){//触发子组件城市选择-选择城市的事件
      alert(data)
    }
}

三、bus同级传值

1、思路

引入一个中间量,专门用于在平级组件之中收发数据

2、实现

01、在main.js中挂载
Vue.prototype.bus=new Vue()

此时,bus作为中间量,承担了运送数据的功能,就像一量公交车,所以也被形象的称为bus。把bus挂载到vue原型上,即可在所有组件中使用

02、在组件中使用——发送方
this.bus.$emit("toBrother", this.msg);

把上述代码放置在你的触发函数中即可

03、在组件中使用——接收方
data(){
	return {
		getMsg: ''
	}
},
beforeCreate(){
	this.bus.$on("toBrother", msg => {
      this.getMsg = msg;
    });
}
  • 总结一下,这种方法有点像键值对,"toBrother"是主键,根据这个主键取值

四、记录在全局变量中保存

这种方法就不用过多介绍了,存在cookie里,localStorage里,或者Vuex里面,都可以实现组件之间共享数据。如果项目规模较大,那么Vuex是非常好的选择