Angularjs 我是否必须创建一个指令来使用$asyncValidators
我创建了以下代码:Angularjs 我是否必须创建一个指令来使用$asyncValidators,angularjs,Angularjs,我创建了以下代码: <input class="inputField" id="registerUserName" name="registerUserName" ng-model="aus.registerUserName" ng-model.$asyncvalidators.unique
<input class="inputField"
id="registerUserName"
name="registerUserName"
ng-model="aus.registerUserName"
ng-model.$asyncvalidators.unique="aus.isUsernameAvailable";
ng-model-options="{ debounce: 2000 }"
ng-minlength="5"
ng-required="true"
placeholder="Username"
type="text"
value="" />
isUsernameAvailable = function {
return true;
}
isUsernameAvailable=函数{
返回true;
}
但我的验证器似乎没有被调用。我看到的所有示例都为AsyncValidator创建了一个指令。有没有可能像我尝试的那样不创建一个指令就可以这样做呢?是的,您必须创建一个指令。您所展示的代码示例有点试图在javascript中使用html 您需要访问要验证的元素上的
ng model
控制器,这(据我所知)只能通过创建另一个指令并在指令定义对象中使用require
来实现
您还可以创建一个指令,该指令接受要添加到异步验证器的表达式
,有点像您在那里所做的
它看起来是这样的:(未经测试,可能无法运行代码!)
然后使用以下标记:
<form ng-controller="validateTestController">
<input class="inputField"
ng-model="whatever"
use-async-validators="validators" />
</form>
等等
这将导致使用alwaysTrue
函数使用名为isNameAvailable
的验证器验证字段,并使用delayedValidator
在同一字段上使用isEmailAvailable
验证另一个字段
显然,这些验证器函数没有真正意义,但希望您能看到,只需几行代码就可以生成一个通用指令,完成您在标记中尝试执行的操作。我现在将查看文档(我还没有使用AsyncValidator),但这绝对是错误的,因为你不能像以前那样在html中使用
。我确实看到了这篇文章:它讨论了如何做,我在答案中没有看到任何指示。但是我不知道如何应用这个例子。在你链接的答案中,username verify
是一个指令。
<form ng-controller="validateTestController">
<input class="inputField"
ng-model="whatever"
use-async-validators="validators" />
</form>