Vue 词条目录
前端Wiki/Vue/进阶/事件与表单

事件与输入修饰符

修饰符让 v-model 的数据处理一步到位:.lazy 失焦/回车才同步(默认每按一键都写数据)、.number 自动转数值(否则拿到的是字符串)、.trim 去首尾空格。可串联 v-model.trim.number。

事件一侧同样有_vue 修饰符:配合表单做即时校验(去掉非数字字符、限制长度),与 computed 的 setter 是两种常见做法。

  • .lazy:失焦或回车才更新数据,减少频繁写入
  • .number:输入自动转 Number,避免 “12” 字符串拼接
  • .trim:去首尾空格;三者可串联 v-model.lazy.trim.number
HTML
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>事件与输入修饰符</title>
<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
</head>
<body>
  <div id="app">
    <!-- .lazy:失去焦点才同步,适合长表单 -->
    <input v-model.lazy="name" placeholder="失焦才同步">
    <p>姓名:{{ name }}</p>
    <!-- .number:自动转数值 -->
    <input v-model.number="age" placeholder="年龄">
    <p>年龄 + 1 = {{ age + 1 }}(类型:{{ typeof age }})</p>
    <!-- .trim:去空格 -->
    <input v-model.trim="email" placeholder="邮箱">
    <p>邮箱:[{{ email }}]</p>
    <!-- 组合修饰符 -->
    <input v-model.lazy.trim.number="price" placeholder="价格">
    <p>价格:{{ price }}({{ typeof price }})</p>
  </div>

<script>
  const { createApp, ref } = Vue;
  createApp({
    setup() {
      return { name: '', age: 0, email: '', price: 0 };
    }
  }).mount('#app');
</script>
</body>
</html>
本节要点.lazy/.number/.trim 是输入处理的三个常用修饰符;number 修复“表单值都是字符串”的坑。