Angular 2自定义验证程序,服务无法正常工作

时间:2017-09-26 20:00:41

标签: angular angular2-template angular2-services

我实现了角度自定义验证器,如果我以这种方式硬编码主逻辑

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;
    };
}

1 个答案:

答案 0 :(得分:1)

好的我找到了答案,它必须是NG_ASYNC_VALIDATORS