【问题标题】:how to disable input from component in Angular 5 app如何在 Angular 5 应用程序中禁用来自组件的输入
【发布时间】:2018-05-24 22:32:40
【问题描述】:

我正在开发 Angular 5 应用程序。我有反应形式,它们都工作正常。现在,当用户单击复选框 true 时,我需要禁用输入。一切正常,我想知道如何禁用组件的输入。我成功获得了输入的 id 但不确定下一步该怎么做???

组件

private handleQuestionAnswerProvidedStateChange(questionAnswerProvidedState:QuestionAnswerProvidedStateDataModel)
{
  console.log(">>>>>>> questionAnswerProvidedStateEvent ",questionAnswerProvidedState);
  var elementReference = document.getElementById(questionAnswerProvidedState.QuestionId);
  console.log("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>

后面的文字是循环的,所以会有很多输入,每个都有唯一的id

【问题讨论】:

  • 在组件文件中使用ViewChild()作为输入元素并设置disabled = true
  • 在您的打字稿代码中,测试您的复选框,如果选中则禁用输入字段
  • 做这样的事情:if (document.getElementById("CheckBoxId").checked == true){ document.getElementById("textFieldId").disabled = true; }
  • 寻找 Pipe+ReactiveForm+Disable

标签: angular angular-reactive-forms


【解决方案1】:

为输入元素创建模板引用#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

组件.ts

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

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

编辑:

由于输入是动态生成的,并且正在获取每个元素的 id。

以下应该会有所帮助:

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

【讨论】:

  • 我有许多输入类型,如单选、复选框和海关……使用##inputEl 引用会限制我的代码还是??有没有更通用的方法来实现这一点或使用 javascript
  • 它们都是动态的吗?
  • 是的,它们都是动态生成的……但每个都有唯一的 GUID id
  • document.getElementById(questionAnswerProvidedState.QuestionId) 带回 html 输入的正确引用
  • 得到答案并发布在下面
【解决方案2】:

得到答案....

private handleQuestionAnswerProvidedStateChange(questionAnswerProvidedState:QuestionAnswerProvidedStateDataModel)
{
  console.log(">>>>>>> 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;
    }
  }   
}

【讨论】:

猜你喜欢
  • 2019-07-15
  • 1970-01-01
  • 2018-11-04
  • 1970-01-01
  • 2021-12-29
  • 1970-01-01
  • 2018-12-04
  • 2018-10-17
  • 1970-01-01
相关资源
最近更新 更多