Как отключить ввод из компонента в приложении Angular 5

Я работаю над приложением Angular 5. У меня реактивная форма, которая работает нормально. Теперь у меня есть требование отключить ввод, когда пользователь нажимает на флажок true ... все работает нормально, ожидайте, что я хочу знать, как отключить ввод от компонента. Я успешно получил идентификатор ввода, но не уверен, что делать дальше ???

составная часть

private handleQuestionAnswerProvidedStateChange(questionAnswerProvidedState:QuestionAnswerProvidedStateDataModel)
{
  console.info(">>>>>>> questionAnswerProvidedStateEvent ",questionAnswerProvidedState);
  var elementReference = document.getElementById(questionAnswerProvidedState.QuestionId);
  console.info("elementReference ",elementReference);
}

шаблон

 <div *ngSwitchCase = "'textbox'"> <small>textbox</small>
           <div class = "form-group">
               <input *ngSwitchCase = "'textbox'" 
                      [formControlName] = "question.key" 
                      [id] = "question.key" 
                      [type] = "question.type"
                      [(ngModel)] = "question.value" 
                      (keyup.enter) = "onChangeValue($event, previousValue, responseId, question.key, 'textbox'); previousValue = question.value" 
                      (blur) = "onChangeValue($event,  previousValue, responseId, question.key, 'textbox'); previousValue = question.value"
                      (focus) = "previousValue=question.value"
                      >
           </div>            
       </div>

следующий текст представляет собой цикл, поэтому будет много входных данных, каждый с уникальным идентификатором

Используйте ViewChild() для элемента ввода в файле компонента и установите disabled = true

Amit Chigadani 24.05.2018 16:00

в вашем машинописном коде проверьте свой флажок, если он отмечен, отключите поле ввода

Mohd Tabish Baig 24.05.2018 16:01

сделать что-то вроде этого: if (document.getElementById("CheckBoxId").checked == true){ document.getElementById("textFieldId").disabled = true; }

Mohd Tabish Baig 24.05.2018 16:04

ищите Pipe + ReactiveForm + Disable

Eliseo 24.05.2018 18:30
Тестирование функциональных 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
4
5 075
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

Создайте ссылку на шаблон #inputEl для элемента ввода и используйте его в файле компонента.

<div class = "form-group">
                   <input #inputEl
                          *ngSwitchCase = "'textbox'" 
                          [formControlName] = "question.key" 
                          [id] = "question.key" 
                          [type] = "question.type"
                          [(ngModel)] = "question.value" 
                          (keyup.enter) = "onChangeValue($event, previousValue, responseId, question.key, 'textbox'); previousValue = question.value" 
                          (blur) = "onChangeValue($event,  previousValue, responseId, question.key, 'textbox'); previousValue = question.value"
                          (focus) = "previousValue=question.value"
                          >
               </div>

Создайте свойство, используя ViewChild() для элемента ввода в файле компонента .ts, и установите disabled = true

component.ts

@ViewChild('inputEl') public inputEl: ElementRef;

fun() {
  this.inputEl.nativeElement.disabled = true;
}

РЕДАКТИРОВАТЬ :

Поскольку входные данные генерируются динамически и выбирается идентификатор каждого элемента.

Следующее должно помочь:

document.getElementById(questionAnswerProvidedState.QuestionId).setAttribute('disabled', 'true');

У меня много типов ввода, таких как радио, флажок и таможня .... использование ссылки ## inputEl ограничит мой код или ?? есть ли более общий способ добиться этого или использовать javascript

Toxic 24.05.2018 16:14

Все ли они динамичны?

Amit Chigadani 24.05.2018 16:16

да, они все динамически генерируются ... но каждый с уникальным идентификатором GUID

Toxic 24.05.2018 16:17

document.getElementById (questionAnswerProvidedState.Question‌ Id) возвращает правильную ссылку на ввод html

Toxic 24.05.2018 16:18

Тогда вы пробовали этот document.getElementById(questionAnswerProvidedState.Question‌​Id).setAttribute('di‌​sabled', 'true');

Amit Chigadani 24.05.2018 16:23

получил ответ и опубликовал ниже

Toxic 24.05.2018 16:28

получил ответ ....

private handleQuestionAnswerProvidedStateChange(questionAnswerProvidedState:QuestionAnswerProvidedStateDataModel)
{
  console.info(">>>>>>> questionAnswerProvidedStateEvent ",questionAnswerProvidedState);
  if (questionAnswerProvidedState!=null)
  {
    var elementReference = <HTMLInputElement> document.getElementById(questionAnswerProvidedState.QuestionId);
    if (questionAnswerProvidedState.AnswerNotProvided == true)
    {
      elementReference.disabled = true;
    }
    else if (questionAnswerProvidedState.AnswerNotProvided == false)
    {
      elementReference.disabled = false;
    }
  }   
}

Странный код. Я думал, вы используете реактивные формы? stackoverflow.com/questions/43500683/…

Enrico 07.10.2019 13:54

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