У меня есть эта FormGroup:
this.fb.group({
a: ["", Validators.required],
b: ["", Validators.required],
c: [{value: "", disabled: true}, Validators.required]
});
В шаблоне, заполняя первые два элемента управления (a и b), сгенерируйте значение для третьего (c) с помощью метода valueChanges.subscribe().
Ниже в форме есть кнопка для следующих страниц. Это следует отключить до тех пор, пока форма не станет действительной (3 элемента управления не пусты), но на данный момент это не работает так, как я хочу, потому что третий элемент управления отключен, и поэтому проверка этого поля пропускается. В результате после заполнения второго элемента управления, даже если моя функция генерации завершилась неудачей и элемент управления «c» остался пустым, кнопка активируется.
В других сообщениях я видел использование [attr.disabled], но в Angular 15 он, похоже, не работает. Есть ли другой способ отключить поле в шаблоне, продолжая проверку?
Я пытаюсь найти решение, отличное от установки ошибки поля в функцию генерации.





Это похоже на ошибку, см. это обсуждение на github
Но вы можете использовать директиву как временное решение.
//I use "disable" as selector instead of disabled
@Directive({
selector: '[disable]',
standalone:true
})
export class CustomDisabledDirective implements AfterViewInit {
_disable:boolean
@Input('disable') set _(value:boolean)
{
this._disable=value;
this.ngAfterViewInit();
}
constructor(private elementRef:ElementRef) { }
ngAfterViewInit()
{
if (this._disable)
this.elementRef.nativeElement.setAttribute('disabled','true')
else
this.elementRef.nativeElement.removeAttribute('disabled')
}
Я думаю, вы можете достичь этого, оставив элемент управления включенным и просто изменив его стили, добавив/удалив следующий класс (если мы говорим о <input>):
.disabled-input {
pointer-events: none;
cursor: not-allowed;
// you styles for disabled input, for example:
opacity: 0.5;
background-color: #f0f0f0;
color: #808080;
}
Да, я думаю, что в данном случае это самое простое. Я предпочитаю это, а не изменять валидаторы для установки на уровне FormGroup.
Это полезно? stackoverflow.com/a/51575464/3528396