Vue中常用的组件通信

160 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第3天,点击查看活动详情

组件通信☞子传父

父组件想获取子组件的数据

1、子组件里调用 $emit方法,触发父组件自定义事件,可传值,可不传

//子组件在合适的时机,调用this.$emit()方法。触发父组件自定义事件,可传值,可不传
#调用父组件方法并传值
this.$emit('父组件自定义事件',值) 
#调用父组件方法不传值
this.$emit('父组件自定义事件') 

2、 ref 获取组件对象,即可拿到该组件的所有方法和数据

<mycom ref="mycomTemp"></mycom>
//调用子组件getDivText方法,如果直接获取不到可在nextTick()方法里获取
this.$refs.mycomTemp.getDivText(); 

组件通信☞父传子

子组件想获取父组件的数据

1、父组件自定义属性,子组件props接收

2、利用ref 实现父组件向子组件传值

<mycom ref="mycomTemp"></mycom>
this.$refs.mycomTemp.getDivText(this.msg); //调用子组件方法并将data中的msg数据,通过这个方法传递到mycom组件中

组件通信☞vuex全局数据

将数据放在vuex中,这样任何组件都可获取到数据

组件通信☞依赖注入

// 父组件将数据提供给后代组件provide        
父组件:  provide('属性名', 值)
//子组件接收祖先组件提供的数据inject   
任意后代组件:  const money = inject('属性名')

组件通信☞获取组件对象

组件通信☞跨级组件

event bus   //兄弟组件或者跨级组件通信

组件通信☞指定父组件

$parent

组件通信☞指定子组件

$children

修饰符

修饰符☞.native修饰符

.native 修饰符,表示监听组件的原生事件,比如keyup就属于input元素的原生事件(当引用的组件没有这个事件,加这个修饰符表示给它注册一个原生事件)

问题:使用组件时,解决组件开发者未给组件定义我们需要的事件

解决:给组件注册事件却无法触发可以使用 .native修饰符

@click.native 的作用:触发组件元素身上默认的原生事件, 就是当你使用组件时,这个组件开发者可能没有自动提供事件,这时你注册事件可能不生效,需要你添加这个修饰符来触发这个组件的原生事件

修饰符☞.sync修饰符

第一步:先用一句话解释 .sync修饰符可以实现子组件与父组件的双向绑定,并且可以实现子组件同步修改父组件的值。

第二步:具体解释 一般情况下,想要实现父子组件间值的传递,通常使用的是 props 和自定义事件 emit。其中,父组件通过props将值传给子组件,子组件再通过emit 。 其中,父组件通过 props 将值传给子组件,子组件再通过 emit 将值传给父组件,父组件通过事件j监听获取子组件传过来的值。 如果想要简化这里的代码,可以使用.sync修饰符,实际上就是一个语法糖

#子组件
this.$emit('update:title', newTitle) ////newTitle就是你想要修改props数据修改后的值
#父组件
<myconponent :title.sync="Ptitle"></myconponent>

总结:子组件修改父组件数据的方法

1、子组件调用父组件的自定义事件

2、无需调用事件,使用.sync修饰符

image.png

\