修饰符.native和.sync

一.   .native

在vue项目中,我们会自定义许多组件,例如:

<my-com @click="hClick"></my-com>

但是在自定义的组件身上添加 @click 事件后,我们点击这个组件却不会执行回调函数,

原因:

        自定义组件内部并没有 $emit 这个click事件

        对于内置 dom 元素(例如div,button,p......) vue 会自动绑定系统事件(click,mouseenter,......),而对于普通的自定义的组件来讲,却要自己处理

作用:

        .native 事件修饰符是用来在父组件中给子组件绑定一个原生的事件,就将子组件变成了普通的html标签看待.

        所以上诉例子的问题可以通过加 .native修饰符来解决,如下:

<my-com @click.native="hClick"></my-com>

二.  .sync

说道.sync就不得不说一下v-model了,因为它的原理与v-model很相似,

v-model的原理:

<com1 v-model="num"></com1>
等价于

<com1 :value="num" @input="(val)=>this.num=val"></com1>

 注意:

在上图中,son组件不能直接修改father组件中传过来的值,所以需要用this.$emit将+1事件传递给父组件的v-model里的 input(不能随便定义,因为这个事件是v-model固定的) 事件.才能达到在子组件中点击hClick事件达到+1效果

.sync修饰符的原理:

<com1 :a.sync="num" .b.sync="num2"></com1> 

等价于

<com1 
  :a="num" @update:a="val=>num=val"
  :b="num2" @update:b="val=>num2=val">

</com1> 

相当于多了一个事件监听,事件名是update:a,回调函数中,会把接收到的值赋给属性绑定的数据项中

 

注意:

在上图中,son1组件不能直接修改father组件中传过来的值,所以需要用this.$emit将+1事件传递给父组件的v-model里的 update:abc(不能随便定义,因为这个事件是.sync固定的) 事件.才能达到在子组件中点击hClick事件达到+1效果

小结:

.sync 和 v-model 的区别是:

相同点: 都是语法糖,都可以实现父子组件中的数据双向通信

区别点:

                格式不同, v-model='num', ;num.sync='num'

                v-model:   @input + value

                :num.sync: @update:num

                v-model只可以用一次,   .sync可以用多次


版权声明:本文为m0_60823684原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。