我有一个由Angular控制的表单,我希望这会发现潜在的重复用户的电子邮件。
我关注的代码是:http://plnkr.co/edit/XQeFHJTsgZONbsrxnvcI
它包含两个指令:
ngFocus
:能够获得有关输入是焦点还是模糊的信息。
它还会关注hasVisited
变量,以避免验证blur
上的输入(如果用户至少未达到一次)。emailUnique
:执行与现有邮件(硬编码)的简单比较,以便能够验证email
输入。 重点是:(不要忘记放置"标签"触摸以执行blur
功能以查看字段的验证错误)
问题:如何处理最后一个案例?
我有两个假设:
autofocus email-unique ng-focus required
setValidity
指令代码中的emailUnique
方法可以避免ctrl
再次成为$valid
,然后阻止再次执行邮件比较。答案 0 :(得分:2)
只需从解析器功能中删除此代码段:
if(!ctrl.$valid){
return viewValue;
}
此代码阻止再次执行邮件比较。
使用此片段,其下方的代码(进行比较)仅在控件有效时才会运行,但如果控件无效则永远不会运行。
更新了plunker:http://plnkr.co/edit/6q3cANiFI4vpWcVEHRvo?p=preview
如果您不想在电子邮件字段对其他规则(“required”和“email”)无效时执行比较,那么您还需要检查{ {1}}。不要删除上面提到的代码段,只需将其更改为:
ctrl.$error
这样,只有在控件无效但由于其他规则(而不是emailUnique)规则时才会返回。
更新了plunker:http://plnkr.co/edit/IDQitVkeHHDyJlcsatMy?p=preview