Vue 3 迁移策略笔记—— 第25节:v-on.native修饰符被移除

前言

本笔记主要基于官方文档《迁移策略—— 移除v-on.native修饰符》汇总而来。如有理解出入,请以官方文档为主。建议您以官方文档为主,本文为辅。这样您可以“以自己为主”审视的阅读,从而不被我的观点带偏。

知识储备

概述

在 Vue 3.x v-on.native 修饰符将被移除。

Vue 2.x 的 .native 修饰符

在 Vue 2.x,如果想要在一个组件的根元素上直接监听一个原生事件,需要使用v-on.native 修饰符。

<base-input v-on:focus.native="onFocus"></base-input>

Vue 3.x 取消 .native 修饰符

.native 修饰符在 Vue 3.x 已经移除掉了。取而代之的是,在新增的 emits 选项中定义当前组件真正触发的事件(即,组件事件)。此外,Vue 现在将所有未在组件emits 选项中定义的事件作为原生事件添加到子组件的根元素中(除非子组件选项中设置了 inheritAttrs: false)。

<my-component
  v-on:close="handleComponentEvent"
  v-on:click="handleNativeClickEvent"
/>

MyComponent.vue

<template>
	<div>
		<button v-on:click="$emit('click')">click</button>
		<button v-on:click="$emit('close')">close</button>
	</div>
</template>
<script>
  export default {
    emits: ['close']
  }
</script>

上面代码的执行结果是:click事件会被自动添加到<div>中,所以当子组件被点击时,就会触发click事件。

若改成这样:

<template>
	<div>
		<button v-on:click="$emit('click')">click</button>
		<button v-on:click="$emit('close')">close</button>
	</div>
</template>
<script>
  export default {
    emits: ['close', 'click']
  }
</script>

click事件不会被添加给<div>

强烈建议组件中使用的所有通过emit触发的event都在emits中声明。


本系列目录

  • 10
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值