组件之间的数据共享--子组件向父组件共享数据

父组件向子组件共享数据使用的是自定义属性

而子组件向父组件共享数据使用的是自定义事件

也就是说连接共享数据关系链的是一个事件:

我们需要在子组件中使用$emit方法来创建一个自定义的事件,在父组件中使用该方法(也就是通过调用子组件的$emit方法触发了父组件中所使用的方法),父组件会通过事件的调用--使用参数接收到子组件中的数据:

可能这样说有点难以理解,我们通过代码实践一下:

目录

整体运行过程:


1.首先,我们在子组件中定义一个数据num,通过触发点击事件改变数据的同时调用了$emit()方法:

<div id="son2">
    <div>我是一个数字:{{ num }}</div>
    <button @click="addnum">点击+1</button>
</div>
methods:{
    addnum(){
        this.num++
        //第一个参数为自定义事件名称
        //第二个参数为最新的num值
        this.$emit('numchange',this.num)
    }
}

接下来我们需要在父组件中触发自定义事件,拿到this.num这个子组件最新值:

先在父组件中使用data自定义一个数据:

count:0
<Son2 @numchange="getnumber"></Son2>
methods:{
    //使用val形参接收到子组件传过来的num值,并将接收到的数据赋值给自己的count
    getnumber(val){
      this.count = val
    }
}

将数据渲染到模板结构: 

<div id="app">
    <div id="count">
      <h2>{{ count }}</h2>
    </div>
    <Son2 @numchange="getnumber"></Son2>
</div>

整体运行过程:

我们点击子组件按钮、触发子组件点击事件,点击事件调用了$emit方法,$emit方法触发父组件中自定义事件,自定义事件接收到子组件数据,通过插值表达式渲染到页面 

拓展:如果我们想改动父元素的数据让子元素进行同步,我们应该怎们办?

使用自定义属性:

父组件给到子组件一个自定义属性

<Son2 @numchange="getnumber" :newnum="count"></Son2>

子组件接收:

props:['newnum']

 子组件渲染接收到的值:

<div>我是一个数字:{{ newnum }}</div>

目前我们无论修改父组件的数据还是修改子组件的数据都可以进行相互同步:

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Try Tomato

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值