Отключить ввод текста в реактивной форме angular 2

У меня есть реактивная форма в angular 2, которую можно вызвать с помощью кнопки добавления для новой формы или кнопки редактирования для обновления существующих данных. Если пользователь нажимает кнопку редактирования, ввод электронной почты должен быть отключен. У меня есть код ниже, но всякий раз, когда пользователь выбирает редактирование, ввод не отключается. Если я установил для параметра disabled значение true в методе addForm и нажал кнопку редактирования, то ввод электронной почты отключен.

    public addForm(event: string) : FormGroup {

            this.userForm = this.fb.group({
                firstName: ['',
                    [   Validators.required,
                        Validators.maxLength(ManageUsersConstants.maxLengthName)
                    ]],
                lastName: ['',
                    [   Validators.required,
                        Validators.maxLength(ManageUsersConstants.maxLengthName)]
                    ],
                email: [{value: '', disabled : false}],
                }),
            });
        }
  

    public editForm(event: string, editValues : any) : FormGroup {
        this.userForm = this.fb.group({
            firstName: [editValues.firstName, [
                Validators.required,
                Validators.maxLength(ManageUsersConstants.maxLengthName)]],
            lastName: [editValues.lastName,
                [   Validators.required,
                    Validators.maxLength(ManageUsersConstants.maxLengthName)]],
            email: [{value: editValues.email, disabled: true}],
        });

    }

Похоже, вы просто переназначаете форму. Почему бы напрямую не нацелить ввод и вместо этого изменить его? this.userForm.get('email').disable(); (думаю, чуть-чуть не трогал ?)

MichaelSolati 31.05.2018 17:23

извините, как вы имеете в виду прямую нацеливание на ввод? HTML?

BrianM 31.05.2018 17:25

Я имею в виду таргетинг на электронную почту от FormGroup (например, бит кода из моего последнего комментария)

MichaelSolati 31.05.2018 17:27

Я пробовал это, а также установил / патч, но все еще кажется, что он установлен на false

BrianM 31.05.2018 17:31
Тестирование функциональных 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
1
4
6 813
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В событии редактирования добавьте следующий код this.formGroup.controls['email'].disable() ;

Component.ts

 ngOnInit() {
    this.formGroup = this.formBuilder.group({
      email: [{value: '', disabled : false}]      
    });  
  }  

  onEdit(){    
    this.formGroup.controls['email'].disable()   
  }

HTML

<form [formGroup] = "formGroup" (ngSubmit) = "onSubmit()" #form>
    <div>
      <label for = "dateone">Email: </label>
      <input formControlName = "email" #email/>          
      <button type = "button" (click) = "onEdit()">edit</button>  
      </div>
</form>

Демо Stackblitz

Быстрый вопрос, я добавил эту строку кода в редактирование, и она работает, но всякий раз, когда я снова нажимаю на кнопку «Добавить», ввод отключается. Я добавил эту строку кода в - this.userForm.controls ['email']. Enable (); - после того, как форма создана, но по-прежнему отключена. Я получаю undefined, если добавляю его до создания формы

BrianM 01.06.2018 13:44

Он заработал, просто добавил проверку, чтобы убедиться, что он не является неопределенным, и переместил его до создания формы

BrianM 01.06.2018 14:44

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