组件通信之sync-父子数据同步

先实现一个案列 小明花钱 爸爸的钱随之减少

1:点击花钱按钮,爸爸的钱就减少100,数据定义在父组件之中,所以对money操作的函数就要放在父组件之中,所以父组件 Child中绑定一个@update:money =“money=$event"

@update是自定义事件名称,

:money是父组件向子组件传过来的money

“money=$event"就是父组件当中的值修改为子组件传过来的值

这时在子组件中触发这个自定义事件 (update:money)  然后写下点击之后真正剩下的钱数

(money-100)

父组件
<template>
  <div>
    小明的爸爸现在有{{money}}元
    <h2>不使用sync修改符</h2>
    <Child :money="money" @update:money="money=$event"/>
</div>
</template> 
<script type="text/ecmascript-6">
import Child from './Child.vue'
export default {
  name: 'SyncTest',
  data() {
    return {
      money:10000
    }
  },
  components: {
    Child,
    Child2
  }
}

子组件

<template>
  <div style="background: #ccc; height: 50px;">
    <span>小明每次花100元</span>
    <button @click="$emit('update:money',money - 100)">花钱</button>
    爸爸还剩{{money}}元
  </div>
</template>

<script type="text/ecmascript-6">
  export default {
    name: 'Child',
     props:['money']

  }
</script>

下面写有修饰符sync的---作用都是一样的

父组件的child改成
 <Child2 :money.sync="money"/>

这样写完代表子组件会给父子件传递一个money的值,也会给当前这个child2绑定一个自定义事件就叫update:money(虽然他没写update)但是会自动给绑定一个update事件

子组件child2,与child是相同的
<template>
  <div style="background: #ccc; height: 50px;">
    <span>小明每次花100元</span>
    <button @click="$emit('update:money',money - 100)">花钱</button>
    爸爸还剩 {{money}} 元
  </div>
</template>
<script type="text/ecmascript-6">
  export default {
    name: 'Child2',
    props:['money']
  }
</script>

相同效果

总结:

理解传值过程:子组件的money是props接收过来的,然后money-100这个新值我要通过触发父组件绑定的自定义事件($emit(update:money))发送给父组件。

  :money.sync  有两个含义

1:给子组件传递props:money

2:给当前子组件绑定一个自定义事件   时间名 update  属性名(update:money)

还有一个父子组件通信-$attrs 和$Listeners

$attrs:可以获取所有父组件传过来的props数据(props没有接收)

$listeners:可以获取父亲传递的自定义事件

通过绑定这两个属性  我可以把父组件的按钮里面的属性事件全部显示自组件这个按钮身上并且显示出来。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

我叫LiLi

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

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

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

打赏作者

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

抵扣说明:

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

余额充值