Что ж, благодаря @Brandom я придумала решение для моего варианта использования.
В тот момент, когда я написал это, я не знал, что такой класс уже существует
В качестве примечания: я бы предпочел, чтобы, если элемент управления формыпроходит проверку из-за асинхронного валидатора, который предоставляет класс ng, скажем, ng-validating .
Что я сделал.
Я добавил свойствок родительскому компоненту под названием валидация и пара методов, validationStarted и validationEnded .
@Component{/* Some options here */}
export class MyComponent{
// ...
validating: bool = false;
public validationStarted() {validating = true;}
public validationEnded() {validating = false;}
}
В пользовательском валидаторе (который являетсяреализовано как директива) Я также добавил два выходных свойства: начальная проверка и окончательная проверка .Поэтому мой пользовательский валидатор выглядит примерно так:
@Directive{ /*Some options here*/ }
export class DirectiveName {
@Output startingValidation: EventEmitter;
@Output finishingValidation: EventEmitter;
// Async validator must return a Promise or an Observer
validate (control: AbstractControl): Promise<ValidationErrors|null> | Observer<ValidationErrors|null>
{
self.startingValidation.emit()
return new Observer(observer => {
next => {},
error => {},
complete => {
self.finishingValidation.emit();
}
});
}
}
И проверяемый элемент управления:
<input (startingValidation)="validationStarted()" (finishingValidation)="validationEnded()">
Теперь я могу:
<button [class.disabled]="validating">
Я надеюсь, что этопомочь всем, кто борется с подобным вариантом использования.
Обновление
Как указывает @ Cristian_Traìna, действительно есть класс: ng-pending .И был запрошен в 2016 году: https://github.com/angular/angular/issues/10336