Vue之理解.sync修饰符

迈不过友情╰ 2022-10-24 13:09 229阅读 0赞

故心故心故心故心小故冲啊


文章目录

  • .sync 修饰符是事件绑定的语法糖。

.sync 修饰符是事件绑定的语法糖。

应用场景是在父子组件传值的,且子组件要修改这个数据的时候使用。它的原理是利用EventBus,子组件触发事件,父组件响应事件并实现数据的更新,避免由子组件直接修改父组件传过来的内容。(如果子组件直接操作,vue会有警告提示)

用一个现实中的例子来说:正常来说,钱都是在父亲身上的,儿子要用钱是告诉父亲要用钱,然后父亲从身上拿出钱给儿子使用。如果说子组件直接操作父父组件传过来的值,等同于儿子没经过通知父亲这一步就拿钱用了,这等于是偷钱,不合理的。

其实父子组件传值的过程等同于是父亲告诉儿子,我有这么些个钱可以用,不是让子组件直接操作这个值。你要用多少,告诉我,然后把用完后会剩余多少告诉我就可以了。

child.vue(子组件)

  1. <template>
  2. <div class="child">
  3. { { money}}
  4. <!-- 我要用100 -->
  5. <button @click="$emit('update:money', money)">
  6. <span>花钱</span>
  7. </button>
  8. </div>
  9. </template>
  10. <script>
  11. export default {
  12. props: ["money"]
  13. };
  14. </script>
  15. <style>
  16. .child {
  17. border: 3px solid green;
  18. }
  19. </style>

parent.vue(父组件)

  1. <template>
  2. <div class="app">
  3. App.vue 我现在有 { { total}}
  4. <hr>
  5. <!-- 语法糖式写法 -->
  6. <!-- <Child :money.sync="total"/> -->
  7. <Child :money="total" v-on:update:money="total = $event"/>
  8. </div>
  9. </template>
  10. <script>
  11. import Child from "./Child.vue";
  12. export default {
  13. data() {
  14. return { total: 10000 };
  15. },
  16. components: { Child: Child }
  17. };
  18. </script>
  19. <style>
  20. .app {
  21. border: 3px solid red;
  22. padding: 10px;
  23. }
  24. </style>

这个代码就是上述内容的解释,实现的原理是利用eventBus,在子组件使用$emit(‘update:money’, money-100) 来通知父组件去响应,而父组件则通过$event 来接收经过子组件修改后的值。

注意v-on:update:money这里事件必须写为update:mondy,update是vue规定的语法书写格式,money是被绑定事件的属性。正式这样的规定使

  1. <Child :money="total" v-on:update:money="total = $event"/>

这么长的语句得以缩写为:

  1. <Child :money.sync="total"/>

而子组件内也必须用’update:money’事件名去触发响应

  1. <button @click="$emit('update:money', money-100)">

发表评论

表情:
评论列表 (有 0 条评论,229人围观)

还没有评论,来说两句吧...

相关阅读

    相关 vue.sync修饰符

    根据VUE官方文档所述,.sync修饰符用来prop双向绑定,而.sync修饰符类似v-model,只是一个语法糖 ![在这里插入图片描述][watermark_type_

    相关 .sync修饰符

    第一步:先用一句话解释 .sync修饰符可以实现子组件与父组件的双向绑定,并且可以实现子组件同步修改父组件的值。 第二步:具体解释 一般情况下,想要实现父子组件间