面试题答案
一键面试文本框场景
- .lazy修饰符
- 使用方式:
<input v-model.lazy="message" type="text">
- 适用场景:当你不希望每次输入都触发数据更新,而是在失去焦点时才更新数据。例如在搜索框中,用户输入完内容后,希望在离开输入框时才触发搜索操作,而不是每输入一个字符就搜索。
- 实现机制:Vue通过监听
input
元素的blur
事件,而不是默认的input
事件来更新数据。默认情况下,v - model
绑定是在input
事件触发时更新数据,添加.lazy
修饰符后改为在blur
事件触发时更新。
- 使用方式:
- .number修饰符
- 使用方式:
<input v-model.number="age" type="number">
- 适用场景:当输入框期望用户输入数字类型的值,且需要自动将输入的值转换为数字。比如年龄输入框、数量输入框等,避免用户输入非数字字符导致数据类型不一致问题。
- 实现机制:Vue在数据更新之前,使用
parseFloat
方法将输入的值转换为数字类型。如果转换失败,返回NaN
。例如用户输入“abc”,会转换为NaN
;输入“123”会转换为数字123。
- 使用方式:
- .trim修饰符
- 使用方式:
<input v-model.trim="name" type="text">
- 适用场景:当需要去除用户输入内容两端的空格时。比如用户名输入框,不希望因为用户误输入空格而导致用户名验证失败。
- 实现机制:Vue在更新数据之前,使用
String.prototype.trim
方法去除输入值两端的空格,然后再将处理后的值更新到绑定的数据中。
- 使用方式:
复选框场景
- .lazy修饰符
- 使用方式:
<input v-model.lazy="isChecked" type="checkbox">
- 适用场景:当你不希望每次点击复选框都立即更新数据,而是在失去焦点时更新。例如在一组复杂的表单中,多个复选框操作,希望用户完成所有操作后,离开复选框区域再统一更新数据,减少不必要的实时更新。
- 实现机制:同文本框场景,Vue监听
input
元素的blur
事件而不是change
事件(v - model
默认监听change
事件)来更新数据。当复选框失去焦点时,才更新绑定的数据。
- 使用方式:
- .number修饰符
- 使用方式:复选框场景下
.number
修饰符一般不常用,因为复选框的值通常是布尔类型。但如果一定要使用,可以结合value
属性,如<input v-model.number="selectedValue" type="checkbox" :value="1">
。这里假设selectedValue
初始值为0,选中时selectedValue
会变为1。 - 适用场景:这种情况比较少见,可能在一些特定需求下,需要将复选框的值映射为数字,比如用0和1代表不同状态,且后续处理逻辑更倾向于数字类型。
- 实现机制:同文本框场景,Vue在数据更新前使用
parseFloat
方法将value
属性的值转换为数字,然后更新到绑定的数据中。
- 使用方式:复选框场景下
- .trim修饰符
- 使用方式:复选框场景下
.trim
修饰符不适用,因为复选框的值只有选中(true
)和未选中(false
),不存在空格处理的需求。 - 适用场景:无。
- 实现机制:N/A,因为不适用此场景。
- 使用方式:复选框场景下