我实现了角度自定义验证器,如果我以这种方式硬编码主逻辑
import { Directive, forwardRef } from '@angular/core';
import { NG_VALIDATORS, FormControl } from '@angular/forms';
import { UserAdministrationService } from "./useradministration.service";
function validateUserNameFactory(userAdministrationService: UserAdministrationService) {
return (c: FormControl) => {
return {
validateUserName: {
valid: false
}
};
};
}
@Directive({
selector: '[validateUserName][ngModel],[validateUserName][formControl]',
providers: [
{ provide: NG_VALIDATORS, useExisting: forwardRef(() => UsernameValidator), multi: true }
]
})
export class UsernameValidator {
validator: Function;
constructor(private userAdministrationService: UserAdministrationService) {
this.validator = validateUserNameFactory(userAdministrationService);
}
validate(c: FormControl) {
return this.validator(c);
}
}
但现在我想在内部使用服务器调用,而这个调用不起作用
function validateUserNameFactory(userAdministrationService: UserAdministrationService) {
return (c: FormControl) => {
const q = new Promise((resolve, reject) => {
setTimeout(() => {
userAdministrationService.lookupUser(c.value).subscribe(() => {
resolve({
validateUserName: {
valid: false
}});
}, () => {
resolve({
validateUserName: {
valid: false
} });
});
}, 1000);
});
return q;
};
}
答案 0 :(得分:1)
好的我找到了答案,它必须是NG_ASYNC_VALIDATORS