vue组件化常用技术

组件传值和通信

父组件传给子组件

属性props

  //   子组件
  props:{ msg : String }
  //  父组件
  <child :msg="hello"></child>

引用refs

  //  父组件
  <child ref="comp"></child>
  this.refs['comp'].msg = 'hello'

子组件传给父组件

$emit

  //  子组件
  this.$emit('add',addFunction)
  //  父组件
  <child @add="add($event)"></child>

兄弟组件

通过共同的父组件搭桥

  //  组件1
  this.$parent.$emit('add',addFunction)
  //  组件2
  this.$parent.$on('add',handleAddFunction)

祖先和后代之间

祖先传给后代–provide/inject

  //  祖先
  provide(){
  	return {foo : 'foo'}
  }
  //  后代
  inject: ['foo']

后代传给祖先–dispatch

	//  定义一个派发的方法,指定派发的方法名和数据
	function dispatch(eventName,data){
		let parent = this.$parent
		//  只要父组件存在就一直往上找
		while(parent){
			parent.$emit(eventName,data)
			parent = parent.$parent
		}
	}
	//  后代组件中使用
	<h1 @click="dispatch('sayHello','hello')">你好</h1>
	//  祖先组件中
	this.$on('sayHello',this.sayHello)

任意两个组件之间传值

事件总线

	//  方式一:创建一个bus类 
	class Bus(){
		constructor(){
			this.callbacks = {}
		}
		$on(name,fn){
			this.callbacks[name] = this.callbacks[name] || []
			this.callbacks[name].push(fn)
		}
		$emit(name,args){
			if(this.callbacks[name]){
				this.callbacks[name].forEach(cb => cb(args))
			}
		}
	}
	//  使用
	Vue.prototype.$bus = new Bus()
	//  组件1
	this.$bus.$emit('sayHello',sayHello)
	//  组件2
	this.$bus.$on('sayHello')

vuex

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值