在我的Angular项目中,我的用户拥有唯一的用户名。因此,当我创建或编辑用户时,如果已经使用了用户名,我想显示错误消息。 因此,我在表单中使用自定义userExists指令来添加或编辑用户。用户表单本身是一个元素指令,用于添加和编辑。
function userExists($q, UserApi) {
return createDirective(link);
function link(scope, element, attrs, ctrl) {
ctrl.$asyncValidators.userExists = validator;
function validator(modelValue, viewValue) {
if (ctrl.$isEmpty(modelValue)) {
return $q.when();
}
var deferred = $q.defer();
UserApi.getByName(viewValue).then(function() {
deferred.reject();
}, function() {
deferred.resolve();
});
return deferred.promise;
}
}
}
function createDirective(link) {
return {
restrict: 'A',
require: '^ngModel',
link: link
};
}
以下列方式使用:
<input type="text" name="username" ng-model="user.username" user-exists required/>
如果添加新用户,验证器可以正常工作。我的问题是,如果我编辑现有用户,它会失败,因为当用户名未更改时,它显然已存在于服务器上。我不知道如何实现这种行为。如果用户名存在于服务器上并且它不是已编辑用户的用户名,我需要进行一些检查,例如&#34;无效。#34;。 由于模型对象的用户名直接绑定到输入,我不知道如何访问原始值。