Vue父子组件常用通信

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

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

父组件:

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

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

这时候子组件接收的就是一个字符串goods。

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

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

,然后父组件调用this.$refs.CartNum.getCartNum()

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

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

props: ['goods'],

data() { return { skus: this.goods,

} },

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

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

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

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

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

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

然后="refleshCartNum"这里的refleshCartNum是父组件的方法,在子组件里面某个方法里触发this.emit('refleshCartNum');相当于执行了父组件的refleshCartNum方法。this.emit还可以接受第二个参数,第二个参数就是方法传递的参数。

欢迎关注Coding个人笔记 公众号

转载于:https://juejin.im/post/5c4ad7626fb9a049f912f11b

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值