Angular 4 - 验证程序取决于存储在服务中的有效值列表

时间:2017-10-05 15:34:43

标签: angular

我有一个指令来验证输入值是否包含在值列表中。此值列表是动态的,因此它是指令的参数:

@Directive({
selector: '[lookup]',
providers: [{provide: NG_VALIDATORS, useExisting: LookupDirective, multi: true}]
})
export class LookupDirective implements Validator {

    @Input() lookupCollection: Array<any>;

    validate(control: AbstractControl): { [key: string]: any } {
        return lookupValidator(this.lookupCollection)(control);
    }
}

在html中,指令的使用方式如下:

lookup [lookupCollection]="myService.valuesAsObservable | async"

问题是,验证器仅在输入更改时调用,而不是在observable提交新值时调用。

另外,我不是在指令中注入服务,因为根据组件的不同,使用的服务也不一样。

由于

1 个答案:

答案 0 :(得分:0)

创建一个使用任意参数而不是AbstractControl的acync验证器。这样您就可以完全控制何时调用它。看看这个示例应用: https://github.com/Farata/angular2typescript/tree/master/Angular4/form-samples/src/app/async-validator

特别是,看看我如何在服务中使用checkWorkAuthorizationV2()方法。在那个例子中,我订阅了valueChanges,但我可以随时调用这个方法。返回该方法后,我使用表单上的setErrors()方法来显示错误(如果有的话)。