【发布时间】:2018-03-08 04:08:12
【问题描述】:
我实现了 Angular 自定义验证器,如果我以这种方式对主要逻辑进行硬编码,它就可以工作
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;
};
}
【问题讨论】:
-
究竟是什么不起作用?你有什么错误或者没有被调用吗?
-
@Al-Mothafar 不只是验证器不会启动,如果有一个承诺,那么它完全不起作用,就像必须立即返回一样
标签: angular angular2-template angular2-services