代码之家  ›  专栏  ›  技术社区  ›  Miguel Frias

“角度材质”复选框不会更改“已选中”的状态

  •  1
  • Miguel Frias  · 技术社区  · 6 年前

    mat-checkbox 组件中我使用i函数 [checked]="existInArray(color.id, filterColor)" 指令检查复选框如果值已经在过滤器数组中,则检查复选框,但我有一个问题,如果使用函数选中复选框,下次单击复选框取消选中时,复选框不会更改 checked true to false ,仅当我第二次单击“更改为”时 checked false

    模板

    <mat-checkbox *ngFor="let color of filterService.getFilter(filterType.FILTER_COLOR).items.ToArray() | filterQuery:filterOptions.color"
      [checked]="existInArray(color.id, filterColor)" class="filter-checkbox" [value]="color.id" [hidden]="color.id === '999999'"
      (click)="filterBy(filterType.FILTER_COLOR, color.id, filterColor)">
      <div class="assigned">
        <div class="assigned-avatar text-center" [ngStyle]="{ 'background-color': color?.color?.bgColor }"></div>
        <p class="assigned-name">{{ color.name }}</p>
      </div>
    </mat-checkbox>
    

      public existInArray(element, array: Array<string>): boolean {
        return array.indexOf(element) > -1;
      }
    
      public filterBy(filterType: FilterTypeEnum, element: any, array: Array<string>) {
        this.toggleInArray(element, array);
        this.updateFilterObservable(filterType);
      }
    

    enter image description here

    existInArray 函数来检查检查值是否已经存在于过滤器数组中,如果我尝试取消选中它,第一次不起作用,但是当我第二次单击复选框未选中时,你知道会是什么吗。。。。?

    我想原因是因为 [checked]

    2 回复  |  直到 6 年前
        1
  •  7
  •   Marshal    6 年前

    这是你工作的时间问题 [checked]="existInArray(color.id)" 与您的单击事件不同步。。。。 change 事件。

    (change)="toggleInArray(color.id)"
    
        2
  •  -1
  •   Mohammed Hussain    6 年前

    顶部选择:任意[]=[];//选择时清除选择。。。在您的ts文件中

    this.Top\u Select[index\u chkbx]=true;