前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Vue父子组件通信

Vue父子组件通信

作者头像
wade
发布2020-04-24 11:55:11
6460
发布2020-04-24 11:55:11
举报
文章被收录于专栏:coding个人笔记

Vue开发,父子组件之间通信很常用,有传数据的,有调用方法的,有子组件操作父组件,也有父组件操作子组件,今天就简单说一下几个父子组件之间通信的方法。

父组件传递数据给子组件一般都是用props,

父组件:<spec :goods="goods"></spec>

子组件接收:props: ['goods'],跟data同级。

goods是子组件接收的键值,当你要传父组件data里面的数据的时候就需要bind,子组件接收的就是父组件data里面的goods数据,如果不需要可以直接

<spec goods="goods"></spec>这时候子组件接收的就是一个字符串goods。

父组件理论上改变子组件是通过改变传递数据,那么这时候就要使用v-if来控制显示隐藏,用v-if控制子组件会重新渲染,props数据也就会重新渲染。要是子组件直接是一直显示,我能想到的只能是调用子组件方法然后传参。

父组件调用子组件方法,要先给子组件加个ref属性,

<headCom ref="CartNum"></headCom>,然后父组件调用this.$refs.CartNum.getCartNum()

getCartNum()是子组件里面的方法。如果要改变子组件数据可以在getCartNum()方法里传递参数,子组件自己改变页面数据。

子组件获取了父组件传递过来的数据之后,是不能直接按照当前修改data里面的数据修改,防止父组件状态被改变了。如果子组件要改变传递过来的数据,可以在子组件这边再声明一个数据

代码语言:javascript
复制
props: ['goods'],
data() {
    return {
      skus: this.goods,
}
},

这样子组件就可以随便修改数据,要是父子组件数据要同步,可以使用

this.$parent.specFlag = false; specFlag是父组件data里面的数据

还有一种方法就是调用父组件的方法,跟父组件改变子组件数据一样,通过方法。

<spec @refleshCartNum ="refleshCartNum"></spec>父组件引用子组件 this.$emit('refleshCartNum');子组件调用

@refleshCartNum也可以用:refleshCartNum,我们用@refleshCartNum是为了区分数据和方法,而且在子组件是不需要再props里面接收方法。

this.$emit('refleshCartNum');里面的'refleshCartNum'就是@refleshCartNum这个键值,跟数据传递一样。

然后="refleshCartNum"这里的refleshCartNum是父组件的方法,在子组件里面某个方法里触发this.

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-07-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 coding个人笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档