我有以下输入字段,下面有一条错误消息:
<div class="field" :class="{ error: !!errorMessage }">
<input type="text" v-model="name" @input="checkName" />
<div class="error-message">{{ errorMessage }}</div>
</div>
..和checkName
方法,其中..好吧,检查名称:
...,
methods: {
checkName() {
if(this.name.length < 3) {
this.errorMessage = "Name too short";
} else {
this.errorMessage = null;
}
}
}
这一切都很好用,但我在.field.error
上有一个动画,我想等到它完成再清除errorMessage
。
.field {
max-height: 0;
transition: all 1s; // animate-out of error
}
.field.error {
max-height: 3em;
transition: all 0.6s; // animate-in to error
}
就目前而言,checkName
同时 (a( 删除现场的error
类和 (b( 清除errorMessage
。由于errorMessage
立即被清除,因此动画毫无意义(因为<div>
现在是空的..(。
我想要的是,在从字段中删除error
类和errorMessage = null
类之间有 1 秒的延迟 - 以便有足够的时间完成传出错误动画。
有没有办法做到这一点而不必引入额外的data
值?(我已经为一个字段显示了上述内容,但我总共有 4 个字段(
您可以使用name
来切换类error
。
要么像这样:
<div class="field" :class="{ error: name.length < 3 }">
或通过计算方法:
<div class="field" :class="{ error: !nameIsValid }">
computed: {
nameIsValid() {
return this.name.length > 2
}
}
我推荐后者,特别是如果您想使用多个错误情况(即"名称太长"、"无效字符"......
但是你必须承认初始状态。由于name.length
最初为 0,因此您最初会显示错误 - 这可能是不需要的。
对于验证(包括错误消息处理(,您还可以使用像Vuelidate这样的插件。