【问题标题】:Angular 7: Clear selection with x-button on a dropdown boxAngular 7:使用下拉框上的 x 按钮清除选择
【发布时间】:2018-11-30 10:32:43
【问题描述】:

我想我可以将来自 Angular 的 dropdownInput with clear box 的示例组合到:

<mat-form-field >
  <mat-select placeholder="Country" [(value)]="selectedCountry" (selectionChange)="emitItemChanges()">
    <div *ngFor="let item of lstItems|async">
      <mat-option *ngIf="addItem(item)" [value]="item">{{item.title}}</mat-option>
    </div>
  </mat-select>
  <button mat-button *ngIf="selectedCountry" matSuffix mat-icon-button aria-label="Clear" 
    (click)="selectedCountry=undefined">
    <mat-icon>close</mat-icon>
  </button>
</mat-form-field>

这与预期的方式接近

清除输入。我现在面临的问题是它会立即打开选择框。无论如何如何防止这种行为?

我知道还有其他解决方案可以清除选择。我想知道这种方法是否可行?

【问题讨论】:

  • (click)="selectedCountry=undefined; $event.preventDefault()"&gt;
  • 不,这无济于事 :-( 似乎仍然处理了该事件。但是...查看更新的答案。

标签: angular angular-material angular7


【解决方案1】:

(click)="selectedCountry=undefined; $event.stopPropagation()" 帮忙!感谢@Sachila :-)

所以完整的代码如下:

  <button mat-button *ngIf="selectedCountry" matSuffix mat-icon-button 
    aria-label="Clear" (click)="selectedCountry=undefined; $event.stopPropagation()">
  <mat-icon>close</mat-icon>

【讨论】:

  • (click)="searchForm.get('to').setValue(''); $event.stopPropagation()" 这对我有用。我只有 (click)="searchForm.get('to').setValue('') 但是我没有让下拉菜单添加 stopPropagation 并且它开始工作
【解决方案2】:

响应式表单示例

$event.stopPropagation() - 不再打开选择

       <mat-form-field>
         <mat-select formControlName="team" placeholder="Team">
           <mat-option *ngFor="let team of availableTeams" [value]="team.id">{{team.name}}</mat-option>
         </mat-select>
         <button *ngIf="form.controls.team.value"
                 matSuffix
                 mat-icon-button
                 type="button"
                 aria-label="Clear"
                 (click)="form.controls.team.setValue(null); $event.stopPropagation()">
           <mat-icon>close</mat-icon>
         </button>
        </mat-form-field>

【讨论】:

  • 如何通过一个按钮取消选择所有来取消选择多个mat-selects。通过在 component.ts 中使用按钮单击方法说?如何处理 $event.stopPropogation() 部分?例如onClearFilters() { ... setValues of all mat-selects to null; }
  • 在删除并将值设置为空后从下拉列表中选择一个值时,我遇到了类似的问题我无法再次看到下拉列表,直到我点击外部。任何解决方案。
  • 也许自己提出一个问题。我猜你需要在删除项目后运行ChangeDetction.detectChanges()。但老实说,我不太明白你在问什么 - 就工作流程而言。
猜你喜欢
  • 2011-02-10
  • 1970-01-01
  • 2015-05-11
  • 2021-11-20
  • 2018-01-23
  • 1970-01-01
  • 1970-01-01
  • 2013-04-17
  • 2020-04-11
相关资源
最近更新 更多