组件间通信

全局事件总线

作用

一种组件间通信的方式 适用于任意组件间通信。

安装

安装全局事件总线:在入口文件main.js中,给VM添加$bus,任意组件都可以在原型中调用。

beforeCreate(){

  Vue.prototype.$bus  = this

}

组件使用

给全局事件总线,绑定自定义事件getName 谁需要接收数据就再谁绑定。

子组件:UserInfo中:

this.$bus.$on('getName',(data)=>{
				// console.log("UserInfo接收到数据",data);
				this.shopname = data;
})

组件销毁之前卸载自定义事件


beforeDestroy() {
			this.$bus.$off('getName')
}

发送数据

谁需要传递数据,谁就调用自定义事件

子组件:Order中:

methods: {
			sendName() {
				// 谁需要传递数据,谁就调用自定义事件
				this.$bus.$emit("getName",this.name)
			}
},

订阅与发布

安装

一种组件间通信的方式,适用于任意组件间通信,如今有很多消息订阅与发布的包,在这里只介绍一种,pubsub-js。

安装pubsub:npm i pubsub-js

发布信息

引入: import pubsub from 'pubsub-js'

pubsub.publish('hello','hello-world')   hello:发布消息的名称,第二个参数:为发布内容

接收消息

this.pubId = pubsub.subscribe('hello',(msgName,data)=>{
				console.log(this)
				// console.log('有人发布了hello消息,hello消息的回调执行了',msgName,data)
})

每次接收消息的时,会生成一个订阅的ID

取消订阅

beforeDestroy() {
			// this.$bus.$off('hello')
			pubsub.unsubscribe(this.pubId)
},

$nextTick

定义:在下次DOM更新循环结束之后执行延迟回调,在修改数据之后使用这个方法,获取更新后的DOM。

this.$nextTick(function(){
					this.$refs.inputTitle.focus()
})

你可能感兴趣的:(vue.js,前端,javascript)