网站首页 > 博客文章 正文
Vue 3 的到来,不仅带来了性能的提升,更带来了代码风格的革新!曾经熟悉的 keyCode、v-on.native、过滤器(filter) 和 $listeners 都已成为过去式。今天,就让我们跟随 Vue 3 的步伐,告别这些“旧爱”,拥抱更简洁、高效的新语法!
keyCode和config.keyCodes退出历史舞台
Vue 3 彻底移除了 keyCode 作为 v-on 的修饰符,同时也不再支持 config.keyCodes。为了处理键盘事件,建议使用标准的 KeyboardEvent.key 属性。
旧爱:
<template>
<input @keyup.enter="handleEnter" />
</template>
新欢:
<template>
<input @keyup="handleKeyup" />
</template>
<script>
export default {
methods: {
handleKeyup(event) {
if (event.key === 'Enter') {
// 处理 Enter 键
}
}
}
};
</script>
代码解析:
- 使用 @keyup 监听键盘弹起事件。
- 在事件处理函数中,通过判断 event.key 的值来识别不同的按键。
v-on.native挥泪告别
在 Vue 3 中,v-on.native 修饰符也被移除。对于自定义组件,可以通过 emits 选项显式地声明要触发的事件,然后在父组件中直接监听即可。
父组件:
<template>
<MyComponent @click="handleClick" @close="handleClose" />
</template>
子组件:
<template>
<button @click="$emit('close')">关闭</button>
</template>
<script>
export default {
emits: ['close']
};
</script>
代码解析:
- 父组件可以直接监听子组件 emits 选项中声明的自定义事件。
过滤器(filter)光荣退休
Vue 3 移除了过滤器,建议使用计算属性或方法来替代。
旧爱:
{{ message | capitalize }}
新欢:
<template>
<p>{{ capitalizedMessage }}</p>
</template>
<script>
export default {
computed: {
capitalizedMessage() {
return this.message.charAt(0).toUpperCase() + this.message.slice(1);
}
}
};
</script>
代码解析:
- 使用计算属性 capitalizedMessage 来处理字符串首字母大写。
$listeners功成身退
Vue 3 中移除了 $listeners,事件监听器现在作为 onXxx 属性传递给子组件。
父组件:
<MyComponent @close="handleClose" />
子组件:
<template>
<div v-bind="$attrs">
<!-- ... -->
</div>
</template>
<script>
export default {
setup(props, { attrs }) {
console.log(attrs.onClose); // 打印 onClose 事件处理函数
}
};
</script>
代码解析:
- 子组件可以通过 $attrs 访问到父组件传递的事件监听器。
总结:
Vue 3 的这些变化,虽然让我们告别了一些熟悉的语法,但也为我们带来了更清晰、简洁、易于理解的代码风格。拥抱变化,不断学习,才能在前端开发的道路上越走越远!
猜你喜欢
- 2024-10-27 深入剖析Vue源码 - 你了解v-model的语法糖吗?
- 2024-10-27 Vue3,Composition API(组合) setup、ref、reactive、toRefs案例
- 2024-10-27 Vue3数据传递$attrs(二)(vue三种传值方式)
- 2024-10-27 Vue2 到 Vue3,重学这 5 个常用的 API
- 2024-10-27 vue内置组件、特殊元素、组件api详解
- 2024-10-27 Vue 3最常用的函数或指令(备用查询)
- 2024-10-27 Vue 3新的API——Composition API组合函数(三)
- 2024-10-27 Vue3 - $attrs 的几种用法(1个或多个根元素、Vue3的两种语法)
- 2024-10-27 想知道Vue3与Vue2的区别?五千字教程助你快速上手Vue3
- 2024-10-27 Vue 3 进阶用法:透传特性(vue3 样式穿透)
你 发表评论:
欢迎- 07-07Xiaomi Enters SUV Market with YU7 Launch, Targeting Tesla with Bold Pricing and High-Tech Features
- 07-07Black Sesame Maps Expansion Into Robotics With New Edge AI Strategy
- 07-07Wuhan's 'Black Tech' Powers China's Cross-Border Push with Niche Electronics and Scientific Firepower
- 07-07Maven 干货 全篇共:28232 字。预计阅读时间:110 分钟。建议收藏!
- 07-07IT运维必会的30个工具(it运维工具软件)
- 07-07开源项目有你需要的吗?(开源项目什么意思)
- 07-07自动化测试早就跑起来了,为什么测试管理还像在走路?
- 07-07Cursor 最强竞争对手来了,专治复杂大项目,免费一个月
- 最近发表
-
- Xiaomi Enters SUV Market with YU7 Launch, Targeting Tesla with Bold Pricing and High-Tech Features
- Black Sesame Maps Expansion Into Robotics With New Edge AI Strategy
- Wuhan's 'Black Tech' Powers China's Cross-Border Push with Niche Electronics and Scientific Firepower
- Maven 干货 全篇共:28232 字。预计阅读时间:110 分钟。建议收藏!
- IT运维必会的30个工具(it运维工具软件)
- 开源项目有你需要的吗?(开源项目什么意思)
- 自动化测试早就跑起来了,为什么测试管理还像在走路?
- Cursor 最强竞争对手来了,专治复杂大项目,免费一个月
- Cursor 太贵?这套「Cline+OpenRouter+Deepseek+Trae」组合拳更香
- 为什么没人真的用好RAG,坑都在哪里? 谈谈RAG技术架构的演进方向
- 标签列表
-
- ifneq (61)
- 字符串长度在线 (61)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)