自定义Angular 4验证程序取决于动态值

自定义Angular 4验证程序取决于动态值,angular,validation,angular4-forms,Angular,Validation,Angular4 Forms,我必须创建一个自定义验证器validLocation 因此,当用户输入一个值时,searchLocation将获得搜索的值,并通过Ajax设置location 问题是如何在验证指令中跟踪location 我试着使用@InputvalidLocation和ngOnChanges但是一旦设置了新数据,如何触发验证,这将在承诺解决后设置 感谢您的帮助。如果我理解正确,您可以将您的承诺或观察传达给您的指令,并在其解决时检查其价值,例如: @Directive({ selector: '[validLo

我必须创建一个自定义验证器
validLocation

因此,当用户输入一个值时,
searchLocation
将获得搜索的值,并通过Ajax设置
location

问题是如何在验证指令中跟踪
location

我试着使用@Input
validLocation
ngOnChanges
但是一旦设置了新数据,如何触发验证,这将在承诺解决后设置


感谢您的帮助。

如果我理解正确,您可以将您的承诺或观察传达给您的指令,并在其解决时检查其价值,例如:

@Directive({ selector: '[validLocation]' })
export class ValidLocation implements OnInit {

isPromiseDone: boolean;
promise: any;

@Input()
set validLocation(passedValue: any) {
    if (!passedValue) {
        return;
    }

    const isObservable: boolean = passedValue instanceof Observable;
    const isSubscription: boolean = passedValue instanceof Subscription;
    const isPromise: boolean = passedValue instanceof Promise;

    if (isObservable) {
        this.promise = passedValue.toPromise();
    } else if (isSubscription) {
        this.promise = new Promise((resolve) => {
            (passedValue as Subscription).add(resolve);
        });
    } else if (isPromise) {
        this.promise = passedValue;
    }
    this.checkAndInitPromiseHandler();
}

constructor() {}

initPromiseHandler() {
    const promise = this.promise;
    this.isPromiseDone = false;
    const resolveLoadingState = () => {
        this.isPromiseDone = true;
        this.doSomething()
    };
    if (promise.finally) {
        promise.finally(resolveLoadingState);
    } else {
        promise
            .then(resolveLoadingState, resolveLoadingState);
    }
}

checkAndInitPromiseHandler() {
    if (this.promise) {
        this.initPromiseHandler();
    }
}

ngOnInit() {
    this.checkAndInitPromiseHandler();
}

doSomething(){}
}

你能分享更多的代码或添加你的样本吗?