持续创作,加速成长!这是我参与「掘金日新计划 · 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 将值传给父组件,父组件通过事件j监听获取子组件传过来的值。 如果想要简化这里的代码,可以使用.sync修饰符,实际上就是一个语法糖
#子组件
this.$emit('update:title', newTitle) ////newTitle就是你想要修改props数据修改后的值
#父组件
<myconponent :title.sync="Ptitle"></myconponent>
总结:子组件修改父组件数据的方法
1、子组件调用父组件的自定义事件
2、无需调用事件,使用.sync修饰符
\