【问题标题】:Disable input field after select the value in mat autocomplete in angular?在角度中选择mat自动完成中的值后禁用输入字段?
【发布时间】:2021-03-26 21:47:35
【问题描述】:

大家好,我想在下拉列表中选择值后禁用输入字段,并且我想使用重置按钮重置选定的值。

供参考 Stackblitz :https://stackblitz.com/edit/mat-autocomplete-1uelcd?file=app%2Fautocomplete-display-example.html

例如:- 如果我们在输入字段中选择了任何值,则在单击重置按钮后应该禁用字段,它应该启用以选择值,请检查并帮助我们。

HTML:

    <div class="example-form">
      
      <form>
        <mat-form-field class="example-full-width">
          <input type="text" placeholder="Assignee" aria-label="Assignee" matInput [formControl]="myControl" [matAutocomplete]="auto2">
          <mat-autocomplete #auto2="matAutocomplete" [displayWith]="displayFn">
            <mat-option *ngFor="let option of filteredOptions | async" [value]="option">
              {{ option.name }}
            </mat-option>
          </mat-autocomplete>
        </mat-form-field>
         <button  mat-raised-button (click)="onResetSelection()" color="primary">Reset Selection</button>
      </form>
     
    </div>

重置:


onResetSelection() {
    this.filteredOptions = [];
}

禁用:

[disabled]="filteredOptions =='option'"

【问题讨论】:

  • 为什么不将输入合并到一个变量中?你为什么要重置filteredOptions?您应该重置选定的值吗?
  • 首先我们需要在选择值后选择下拉列表中的值,然后如果我们单击重置按钮禁用输入字段应该禁用并且选择的值应该重置。
  • 我得到了要求。但我认为你的做法是错误的。单击重置按钮时,您应该清除所选值而不是可能值列表。
  • 首先我希望在从下拉列表中选择任何值后禁用输入字段,如果我们想再次更改下拉列表中的值,我们需要删除输入字段禁用功能,这样只有我们需要重置按钮

标签: html angular disabled-input mat-autocomplete


【解决方案1】:

您可以通过以下方法做到这一点

添加选择事件以禁用表单控件,并在执行重置事件时清除表单控件。

在视图中:

  <mat-autocomplete #auto2="matAutocomplete" (optionSelected)="onSelectionChanged($event)" [displayWith]="displayFn">
        <mat-option *ngFor="let option of filteredOptions | async" [value]="option">
           {{ option.name }}
        </mat-option>
   </mat-autocomplete>

在模板中:

  ...

  onSelectionChanged(event: any) {
     this.formGroupName.controls['myControl'].disable();
  }

  onResetSelection() {
    // you can enable the control with below line
    this.formGroupName.controls['myControl'].enable();
    this.formGroupName.controls['myControl'].setValue('');
  }

  ...

编码愉快.. :)

【讨论】:

  • 感谢您的回答,它对我不起作用,如果可能的话,请更新堆栈闪电战以便更好地理解。
  • @Maniselvam 已经尝试过这个stackblitz.com/edit/…,可能会有所帮助..
  • 嗨@ganesh 这个stackblitz 例子我已经看过了,它对我们不起作用,谢谢。可以在我的stackblitz 中实现你上面给出的答案代码吗?
猜你喜欢
  • 2021-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-17
  • 2017-09-13
  • 1970-01-01
  • 2014-01-14
  • 2014-04-01
相关资源
最近更新 更多