Angular mat-select,设置值有问题

标签 angular angular-material

我正在尝试构建一个具有多个(动态创建的)选择下拉列表的组件,以用作搜索过滤器。选定的过滤器应该显示在我正在工作的芯片中,我遇到的问题是在删除过滤器时我想更新下拉列表中的选定选项。

我在这里阅读了几个相关的答案,但无法正常工作。我是否遗漏了一些明显的东西?

这是一个 Stackblitz:https://stackblitz.com/edit/angular9-material-baseline-yxr1sw

从每个选择中选择一个选项,然后移除一个筹码 - 两个选择都被清除。

我需要更改什么才能让它们正确更新?

最佳答案

您正在使用 item.value 作为 mat-optionvalue

filter-select.component.html

<mat-option *ngFor="let item of productFilter.options" [value]="item.value">{{item.name}}</mat-option>

这些值是原始值,因此您不需要 compareWith 函数。

<mat-select multiple [formControl]="filterSelect" (openedChange)="openedChange($event)">

// [compareWith]="compareFn" removed

并且只将您的 formControl 设置为那些项目值

filter-select.component.ts

ngOnInit() {
  this.subscription = this.productFiltersService.selectedFiltersChanged.subscribe(
    (newFilters: ProductFilter[]) => {
      const values = newFilters
        .find(f => f.name === this.productFilter.name)
        .options
        .filter(o => o.isSelected) // <-- only take selected options
        .map(o => o.value); // <-- only take values
      console.log("filterSelect setValue", values);
      this.filterSelect.setValue(values);
    }
  );
}

https://stackblitz.com/edit/angular9-material-baseline-vguwxd?file=src/app/filter-select.component.html

关于Angular mat-select,设置值有问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64554561/

相关文章:

javascript - RadioButtons 行为奇怪 Angular 4

由于动画中的 query() 调用导致 Angular 单元测试失败

angular - 如何更改 Angular Material 2 CSS 导入顺序?

Angular2 从模板点击事件写入控制台

angular - URL 更改时组件不会加载

javascript - 显示下载的 blob 图像

angular - 单击 div 内的按钮时如何禁用 div 上的 matRipple?

angularjs - 使用 md-virtual-repeat 和 md-virtual-repeat-container 的可折叠组标题

angular-material - 垫选择面板最小宽度

javascript - 如何在一个时间间隔内更改垫进度条值?