Vue3入门指北(八)v-model

简介: Vue3入门指北(八)v-model

前言


假如我们有一个表单输入框,在进行表单处理的时候,我们想把输入框的内容同步的更新到定义的JavaScript变量时,我们可能会如下写:


<input
  :value="text"
  @input="event => text = event.target.value">
复制代码


不过对于这种情况,vue做了相应的简化,通过一个v-model指令即可实现。


<input v-model="text">
复制代码


当然,对于textarea<input type="checkbox"><input type="radio">以及<select>都可以使用v-model指令,他会根据你所使用的标签同步的使用相应的事件。


v-model


当我们使用textarea的时候,我们需要主义的是,他并不支持表达式:


<!-- 错误 -->
<textarea>{{ text }}</textarea>
<!-- 正确 -->
<textarea v-model="text"></textarea>
复制代码


相应的,需要通过v-model来实现。


v-model与select


当我们使用 v-model 与 select 结合的时候,需要注意一点,当v-mode的初始值没有和 select中的任何一项匹配时,select会渲染成一个 未选择的状态。这在 ios 上 会导致无法选择第一项,因为他并不会触发change事件。所以这种情况下,可以提供一个 为空值的禁用选项,解决这个问题:


<div>选中的值: {{ selected }}</div>
<select v-model="selected">
  <option disabled value="">请选择任意一项</option>
  <option>一</option>
  <option>二</option>
  <option>三</option>
</select>
复制代码


修饰符


vue官方也为v-model指令,提供了一些修饰符,便于其的操作。


.lazy


看过上面的实例,我们知道v-mode是通过input事件进行更新的。但是如果我们想通过change 事件进行更新的话,可以添加lazy修饰符。


<input v-model.lazy="message" />
复制代码


.number


通过number可以将输入的自动转换为数字。


<input v-model.number="count" />
复制代码


.trim


通过trim修饰符,可以很好的去除用户输入内容两端的空格。


<input v-model.trim="message" />


相关文章
|
8天前
|
JavaScript
Vue3中路由跳转的语法
Vue3中路由跳转的语法
111 58
|
1天前
|
存储 API
vue3中如何动态自定义创建组件并挂载
vue3中如何动态自定义创建组件并挂载
|
7天前
|
JavaScript 索引
Vue 2和Vue 3的区别以及实现原理
Vue 2 的响应式系统通过Object.defineProperty来实现,它为对象的每个属性添加 getter 和 setter,以便追踪依赖并响应数据变化。
22 9
|
8天前
|
JavaScript 开发工具
vite如何打包vue3插件为JSSDK
【9月更文挑战第10天】以下是使用 Vite 打包 Vue 3 插件为 JS SDK 的步骤:首先通过 `npm init vite-plugin-sdk --template vue` 创建 Vue 3 项目并进入项目目录 `cd vite-plugin-sdk`。接着,在 `src` 目录下创建插件文件(如 `myPlugin.js`),并在 `main.js` 中引入和使用该插件。然后,修改 `vite.config.js` 文件以配置打包选项。最后,运行 `npm run build` 进行打包,生成的 `my-plugin-sdk.js` 即为 JS SDK,可在其他项目中引入使用。
|
6天前
|
JavaScript 调度
Vue3 使用 Event Bus
Vue3 使用 Event Bus
11 1
|
7天前
|
JavaScript
Vue3 : ref 与 reactive
Vue3 : ref 与 reactive
9 1
vue3 reactive数据更新,视图不更新问题
vue3 reactive数据更新,视图不更新问题
|
7天前
|
JavaScript
|
7天前
vue3定义暴露一些常量
vue3定义暴露一些常量
|
6天前
Vue3 使用mapState
Vue3 使用mapState
10 0