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>