javascript - 角度事件处理,使用模糊和单击相同方法的正确做法?
问题描述
这可能是一个令人困惑的问题,我在 Angular 中有一个验证方法来检查我是否填充了我的选择,基本上是对值的一个小检查。现在我看到,如果我通过 Tab 键通过键盘切换表单,则 (blur) 事件开始播放,如果我使用 (click) 处理程序,则检查鼠标单击事件。
因此,我想与社区核实这是否是正确的做法,如果不是,那么如果我同时使用这两个事件并在它们上调用相同的方法,那将是更好的方法。
请在下面找到代码示例。
下面的代码在单击和模糊时都执行,然后它尝试检查值,如果值不存在,则显示 contractValidationMessage 并带有一些错误消息,反之亦然。
<select
class="form-control dropdown ng-pristine ng-valid ng-touched"
[(ngModel)]="clientModel.contract.signedBy" #contractSignedBy
(blur) = 'validateContractSignature(contractSignedBy)'
(click) = 'validateContractSignature(contractSignedBy)'
>
<option hidden value="" disabled selected>Singed by</option>
<option *ngFor="let user of userRoles">{{user}}</option>
</select>
<div class="validation-msg">{{contractValidationMessage}}</div>
</div>
只是想了解这是否正确
这是需要时的功能
validateContractSignature(signature){
if(signature.value == ""){
this.signedContract = false;
this.contractValidationMessage = "Please select signing person's name";
}
else{
this.signedContract = true;
this.contractValidationMessage = "";
}
}
解决方案
我 Angular 标准验证器将在您键入时运行。它们甚至会在您输入任何内容之前运行,因此表单通常在您输入任何内容之前就充满了错误。通常你不需要像你一样使用模糊:
(blur) = 'validateContractSignature(contractSignedBy)'
在您的情况下,您似乎只测试了一个必需的。Angular 对此有一个标准的验证器。
<select required></select>
看看:https ://jasonwatmore.com/post/2018/11/10/angular-7-template-driven-forms-validation-example
如果您想要更多地控制表单,您应该检查 ReactiveForms 而不是 Templet 驱动的表单
推荐阅读
- javascript - 同一个promise实例可以有多个thenable吗?
- javascript - 尝试整合 dialogflow 和 firebase
- python-3.x - 这个示例数据清理代码是否更新了 pandas 数据框?
- django - 通过“忘记密码”链接使用 Kiwi 的密码重置显示 500 Internal Server Error。这是 common.py 设置的问题吗?
- mysql - MySQL:使用子查询返回 null 错误
- swift - 应用程序在将主上下文保存到子上下文的父级时不断崩溃
- php - 如何在 laravel 中的 C:\media 等外部目录中更改媒体上传/存储文件?
- django - 访问通过表单上的 OneToOneField 模型链接的模型的数据
- java - 使用 BufferedImage 加载图像时内存使用率高
- python - 将数据附加到 json 中的 Python 函数