【问题标题】:Angular 2 custom validator with service not workingAngular 2 自定义验证器,服务不工作
【发布时间】: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


【解决方案1】:

好的我找到答案了,肯定是NG_ASYNC_VALIDATORS

【讨论】:

  • 正要引用它。可能对未来有帮助reference :)
猜你喜欢
  • 2018-01-26
  • 2011-09-04
  • 1970-01-01
  • 2019-02-22
  • 1970-01-01
  • 1970-01-01
  • 2022-06-10
  • 2016-12-24
  • 2012-04-20
相关资源
最近更新 更多