Vue3 你可能忽略的 v-model 用法(二)

简介: Vue3 你可能忽略的 v-model 用法

🤔写到这里的时候,我就开始思考,这样虽然可以实现功能。这个场景仅仅是改变了一个属性值,我就需要传递三个 props 并且这三个属性值仅仅是为了服务一个 boolean 值属性。于是我想到了之前好像看同事开发过一个组件,是使用 v-model 完成的,于是我转头过去研究了一下他的代码,随后又去查阅了官网。

四. 通过 v-model 实现


我们先看官网的简介。

image.png

说实话,我使用 Vue 几个月以来,一直想不起来使用这个 v-model 的主要原因是就是因为 Vue 官方的这句话

image.png

仅限这几个标签去使用,我是真的没看到这个没有高亮效果的 components,所以一开始我也没理解这个 v-model 的真正强大之处。

v-model 的真正用法应该点击这里进入去查阅。

image.png

这里我们需要重点去理解这段话的意思:

image.png

看到 v-model 展开的样子你发现了什么?对没错,就是一个普普通通的 porps 和一个 emit 自定义事件而已。

image.png

(这里官网写的不是特别清楚,导致我最开始没看懂 modelValue 是啥意思。这里的意思应该是,如果你不给 v-model 起一个名字,那么它就会给你起一个默认的名字,叫做 modelValue,对应的,因为它仅仅是一个 props ,所以子组件去也是需要提前定义一个名叫 modelValueprops, 子组件才能接收使用)

image.png

我们简单验证一下,我在子组件的 props 名称改一下,随之 Vue 就会提示你错误。

image.png

如果想要改名字,也非常简单,只需要在 v-model 加一个冒号然后后面跟上名字即可。

image.png

搞明白了这个,那么接下来的这个自定义时间也就非常好理解了。

image.png

首先父组件注册了一个自定义事件就叫做update:modelValue,这里需要注意的是 update: 冒号后面跟着的名字和 modelValue 是保持一致的。但是前缀一定有 update: 这个关键单词。举个例子,如果是下面的写法:

image.png

那么它最终会被展开写成

image.png

再举个极端的例子,这下应该可以明白了吧。如下:

image.png

我发现还有人不太明白官方的这个写法, 其实这不就是一个普通的箭头函数吗...

image.png

喜欢你可以自己写一个函数放这里也可以呀~

image.png

(Tips:但是要记住,你重新声明的这个 @update:isShow=theFunc 会把默认的(newValue)=>isShow=newValue顶替掉, v-model 仅仅就是上面的一个简写而已。只不过如果你重新设定了这个自定义事件的话,就和你自己传递一个 props 然后传递一个自定义事件没区别了,你就失去了使用 v-model 的意义了,你想使用 v-model 的目的不就是就是想简化一下代码吗)

重点: 父组件注册好了 update:isShow 这个自定义事件,那么现在就剩子组件传递信息过来了。非常简单,在子组件中 emit 即可。

image.png

这里使用的是 Vue3 的写法,主要是 Ts 的语法,其实和你直接这样写是一样的
const emit=defineEmits(['update:isShow'])

效果和上面通过 props 传递两个改变状态的方法是一模一样的。

b7a22fe7de03419fae2fdde2538ec2a0_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.jpg

五. 总结


v-model 双向绑定其实就是一个看作传递 props 和设定自定义事件的语法糖。没有什么很特别的地方。但是如果熟练使用起来的话,在开发通用组件的时候会更近得心应手。


相关文章
|
6天前
|
开发工具 iOS开发 MacOS
基于Vite7.1+Vue3+Pinia3+ArcoDesign网页版webos后台模板
最新版研发vite7+vue3.5+pinia3+arco-design仿macos/windows风格网页版OS系统Vite-Vue3-WebOS。
103 10
|
4月前
|
缓存 JavaScript PHP
斩获开发者口碑!SnowAdmin:基于 Vue3 的高颜值后台管理系统,3 步极速上手!
SnowAdmin 是一款基于 Vue3/TypeScript/Arco Design 的开源后台管理框架,以“清新优雅、开箱即用”为核心设计理念。提供角色权限精细化管理、多主题与暗黑模式切换、动态路由与页面缓存等功能,支持代码规范自动化校验及丰富组件库。通过模块化设计与前沿技术栈(Vite5/Pinia),显著提升开发效率,适合团队协作与长期维护。项目地址:[GitHub](https://github.com/WANG-Fan0912/SnowAdmin)。
733 5
|
1月前
|
缓存 前端开发 大数据
虚拟列表在Vue3中的具体应用场景有哪些?
虚拟列表在 Vue3 中通过仅渲染可视区域内容,显著提升大数据列表性能,适用于 ERP 表格、聊天界面、社交媒体、阅读器、日历及树形结构等场景,结合 `vue-virtual-scroller` 等工具可实现高效滚动与交互体验。
245 1
|
1月前
|
缓存 JavaScript UED
除了循环引用,Vue3还有哪些常见的性能优化技巧?
除了循环引用,Vue3还有哪些常见的性能优化技巧?
144 0
|
2月前
|
JavaScript
vue3循环引用自已实现
当渲染大量数据列表时,使用虚拟列表只渲染可视区域的内容,显著减少 DOM 节点数量。
95 0
|
4月前
|
JavaScript API 容器
Vue 3 中的 nextTick 使用详解与实战案例
Vue 3 中的 nextTick 使用详解与实战案例 在 Vue 3 的日常开发中,我们经常需要在数据变化后等待 DOM 更新完成再执行某些操作。此时,nextTick 就成了一个不可或缺的工具。本文将介绍 nextTick 的基本用法,并通过三个实战案例,展示它在表单验证、弹窗动画、自动聚焦等场景中的实际应用。
409 17
|
4月前
|
JavaScript 前端开发 API
Vue 2 与 Vue 3 的区别:深度对比与迁移指南
Vue.js 是一个用于构建用户界面的渐进式 JavaScript 框架,在过去的几年里,Vue 2 一直是前端开发中的重要工具。而 Vue 3 作为其升级版本,带来了许多显著的改进和新特性。在本文中,我们将深入比较 Vue 2 和 Vue 3 的主要区别,帮助开发者更好地理解这两个版本之间的变化,并提供迁移建议。 1. Vue 3 的新特性概述 Vue 3 引入了许多新特性,使得开发体验更加流畅、灵活。以下是 Vue 3 的一些关键改进: 1.1 Composition API Composition API 是 Vue 3 的核心新特性之一。它改变了 Vue 组件的代码结构,使得逻辑组
1500 0
|
8天前
|
JavaScript
Vue中如何实现兄弟组件之间的通信
在Vue中,兄弟组件可通过父组件中转、事件总线、Vuex/Pinia或provide/inject实现通信。小型项目推荐父组件中转或事件总线,大型项目建议使用Pinia等状态管理工具,确保数据流清晰可控,避免内存泄漏。
103 2
|
3月前
|
人工智能 JavaScript 算法
Vue 中 key 属性的深入解析:改变 key 导致组件销毁与重建
Vue 中 key 属性的深入解析:改变 key 导致组件销毁与重建
529 0
|
3月前
|
JavaScript UED
用组件懒加载优化Vue应用性能
用组件懒加载优化Vue应用性能