我建议编写一个插入NgModelController#$parsers管道的指令(检查来自http://docs.angularjs.org/guide/forms的“自定义验证” )。
这是此类指令的草图:
.directive('uniqueEmail', ["Users", function (Users) {
return {
require:'ngModel',
restrict:'A',
link:function (scope, el, attrs, ctrl) {
//TODO: We need to check that the value is different to the original
//using push() here to run it as the last parser, after we are sure that other validators were run
ctrl.$parsers.push(function (viewValue) {
if (viewValue) {
Users.query({email:viewValue}, function (users) {
if (users.length === 0) {
ctrl.$setValidity('uniqueEmail', true);
} else {
ctrl.$setValidity('uniqueEmail', false);
}
});
return viewValue;
}
});
}
};
}])
这Users.query
是一个异步调用,用于检查电子邮件是否唯一。当然,您应该用对后端的调用来代替它。
完成后,可以像这样使用该指令:
<input type="email" ng-model="user.email" unique-email>
该指令的示例取自Angular应用程序,一些 AngularJS 社区成员试图将其放在一起以说明常见用例。可能值得一试,看看所有这些如何在完整的应用程序中组合在一起。