VUE组件通讯

Posted GHUIJS

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了VUE组件通讯相关的知识,希望对你有一定的参考价值。

  • props(父传子[单向])

父组件parent.vue中通过自定义属性给子组件绑定数据

<son data='父组件消息'></son>

子组件son.vue中通过props接收

props:{
	data:String,
	default:''
}

  •  $emit&自定义事件(只能子传父)

子组件通过$emit给父组件发消息 

this.$emit('sonMsg',this.title);

 父组件中通过自定义事件接收

<component @sonMsg='handleClick'></component>

  • $emit&$on(可用于父子组件、兄弟组件、跨级组件之间通讯[可双向])

注意:

        子级组件传给长辈级组件,数据接收写在created中,

        长辈级组件传给子级组件,数据接收写在mounted中。

main.js中挂载公共vue实例

Vue.prototype.$bus = new Vue();

一组件中通过公共vue实例发起通讯 

this.$bus.$emit('sendMsg','组件一的消息')

 另一组件中接收消息

this.$bus.$on('sendMsg',msg => {
	console.log(msg)
	this.sonTitle = msg
})

  • $ref(父传子)

父组件parent.vue编译模板中给子组件加上ref属性

<son ref="son"></son>

父组件parent.vue中直接通过$refs找到相应子组件修改该子组件已定义变量

this.$refs.son.title = '父组件消息'

  • $children(父传子)

直接在父组件中通过$children访问子组件(我用uni-app测的,非要写两层$children[0])

this.$children[0].$children[0].title = '父组件传值'

  • provide / inject API(只能长辈级组件传给子辈子组件)

长辈级组件中添加provide

provide:{
	fatherTitle:'page标题'
}

直接在子辈组件中用inject接收

inject:['fatherTitle']

  • $attrs/$emit&$listeners(可跨级传值,$attrs是向内部组件传,$listeners是向上级传递)

子组件上绑定自定义属性

<list msg='我系渣渣辉'></list>

子组件内部用$attrs接收

<p>列表组件:{{$attrs}}</p>
this.$attrs

然后可以在孙组件上再次绑定,实现多层传递,孙组件使用跟子组件一样

<list-item v-bind='$attrs'></list-item>

经常用的$emit是子组件给父组件传值,父组件里用自定义属性接收

this.$emit('smsg','列表每一项')

加上$listenters是在父级组件监听,这样还可以再把信息往上传

<list-item v-on='$listeners'></list-item>

然后爷爷组件也能收到孙组件的信息了

<list @smsg='getMst' msg='我系渣渣辉'></list>

以上是关于VUE组件通讯的主要内容,如果未能解决你的问题,请参考以下文章

Vue组件通讯

vue中的组件

vscode代码片段生成vue模板

Vue_(组件通讯)简单使用父子组件

Vue2组件间通讯

VUE组件通讯