Мне нужно отключить FormControl, но продолжить проверку

У меня есть эта 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 он, похоже, не работает. Есть ли другой способ отключить поле в шаблоне, продолжая проверку?

Я пытаюсь найти решение, отличное от установки ошибки поля в функцию генерации.

Это полезно? stackoverflow.com/a/51575464/3528396

leonmain 11.03.2024 19:08
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Angular и React для вашего проекта веб-разработки?
Angular и React для вашего проекта веб-разработки?
Когда дело доходит до веб-разработки, выбор правильного front-end фреймворка имеет решающее значение. Angular и React - два самых популярных...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
Мое недавнее углубление в Angular
Мое недавнее углубление в Angular
Недавно я провел некоторое время, изучая фреймворк Angular, и я хотел поделиться своим опытом со всеми вами. Как человек, который любит глубоко...
Освоение Observables и Subjects в Rxjs:
Освоение Observables и Subjects в Rxjs:
Давайте начнем с основ и постепенно перейдем к более продвинутым концепциям в RxJS в Angular
0
1
139
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Это похоже на ошибку, см. это обсуждение на 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.

Cristian De Vecchi 12.03.2024 17:00

Другие вопросы по теме