问题描述
JS:
export default {
methods: {
required(string) {
if (!string) {
return 'This field is required!'
}
}
}
}
HTML:
<input id="username"
v-model="credentials.username"
type="text"
name="username"
/>
<span>{{ required(credentials.username) }}</span>
以上效果很好。如果我开始输入输入,返回的值变为空。如果我清空输入,返回的值会按预期返回,“此字段是必需的”。
我的问题是,如何将值返回为空/空白以开始?预期流量为:
- 返回值为空/空白开始
- 用户开始输入,没有任何变化,因为 string.length != 0
- 用户删除所有字符,导致string.length == 0,导致返回值为'This field is required!'
解决方法
一种解决方案是使用 input
事件处理程序(为输入中的每个新值调用),该处理程序设置一个标志以指示该字段为“脏”。然后根据标志有条件地呈现验证结果(<span>
):
-
声明一个名为
"dirty"
的数据属性:export default { data() { return { dirty: false,} } }
-
在模板中,在设置
input
标志的<input>
上添加一个dirty
事件处理程序:<input @input="dirty = true">
-
此外,根据
<span>
有条件地呈现dirty
字段:<span v-if="dirty">{{ required(credentials.username) }}</span>