移除 $listeners 和 v-on.native — 非兼容

最后更新于:2022-04-02 08:14:23

>[success] # 移除$listeners -- 非兼容 ~~~ 1.$listeners 对象在 Vue 3 中已被移除。现在事件监听器是 $attrs 的一部分 ~~~ >[info] ## vue2.x 使用 ~~~ 1.'$listeners' 和'$attrs' 出发点的解决思路是一样的,前者是针对事件,后者是针对属性 ~~~ >[danger] ##### 案例说明 ~~~ 1.如果在父组件调用子组件的过程中事件配合'.native' 修饰符相当于给子组件加了一个事件,这样的好处 如果子组件内没有事件暴露出,但我们仅仅只是想通过操作子组件触发父组件的一些事,在通俗的理解 将子组件看做了一个普通dom 并且绑定了一个事件 2.先了解'v-on' 他是支持' v-on="{ mouseover: doTish, mouseout: doThat }"' 这种对象形式的使用 ~~~ >[danger] ##### 上面第一条的案例解释 ~~~ 1.下面案例如果事件没有使用'native'修饰符点击事件是不生效的,可以这么理解没有加是认为你在子组件 通过'$emit'将子组click事件暴露出来,加了理解成整体认为是一个dom元素仅仅是一个元素的click事件 2.子组件是由 'div' 嵌套 'button' 那通过'native'修饰的子组件被处罚事件属于div 还是属于button,这取决于 用户点击的位置,如果用户点击的位置是div 那么就是div触发的click事件 相反就是button触发 ~~~ * 父组件 ~~~ ~~~ * 子组件 ~~~ ~~~ >[danger] ##### $listeners 使用 ~~~ 1.下面课看出通过$listeners 在子组件在进行简写 ~~~ ~~~ ~~~ * 没有使用 ~~~ ~~~ * 使用 ~~~ ~~~ >[danger] ##### 更多具体的参考这个 [跨层级](https://www.cnblogs.com/badaozongcai/articles/12791262.html) [利用计算属性合并](https://www.jumtu.com/article/116843.html) >[info] ## vue3.0 ?? 有点蒙蔽后续看 ~~~ 1.在 Vue 3 的虚拟 DOM 中,事件监听器现在只是以 on 为前缀的 attribute,这样就成了 $attrs 对象的一部分, 因此 $listeners 被移除了。 ~~~ >[danger] ##### 案例 ~~~ 1.如果是事件,在'$attrs' 对应的key 要加on 例如下面案例在'$attrs' 为 { onMouseover:fn..., onClick:fn..., } ~~~ ~~~ ~~~ ~~~ ~~~ >[danger] ##### vue3.x 移除.native ~~~ 1.移除后在以前使用.native 去掉即可 逻辑思维整体还是一样的 ~~~
';