上面三块讲「事件」:三种写法、冒泡与捕获、.prevent / .once / 键盘;下面四块讲「v-model」:每类控件实测存的是什么类型,再踩三个高频坑。 每个按钮只做一件事,点完结论打进最下面的迷你控制台。
| 事件修饰符 | 作用 |
|---|---|
.stop / .prevent | 停止冒泡(stopPropagation)/阻止默认行为(表单提交、链接跳转) |
.capture / .self | 改到捕获阶段触发(先于子元素)/只有 event.target 是元素自己时才触发 |
.once / .passive / .exact | .once 只触发一次后摘掉监听器;.passive 声明不会 preventDefault(不能再配 .prevent);.exact 要求不带其它修饰键 |
| 键盘 | .enter .esc .tab .space .up/.down/.left/.right;推荐写在 @keyup 上(keydown 时常读到旧值) |
| 顺序 | .prevent.stop 与 .stop.prevent 语义不同;.self/.exact 只影响「自己」这一层 |
| 控件 | v-model 里存的是 |
|---|---|
input[text] / textarea | 字符串(空着是 "",不是 null) |
input[radio] / select | 选中项的 value;绑 :value 才存得下数字、对象 |
input[checkbox] 单个 / 带 value | 单个是布尔 true / false;一旦写了 value 就变成数组 |
select[multiple] | 数组 |
.number | 能转数字就存数字,转不了保留原字符串(清空时是 "") |
.trim / .lazy | .trim 在 change 时去首尾空格;.lazy 把同步时机换成 change(失焦/回车) |