Опция выбора всех матов не работает должным образом - PullRequest
0 голосов
/ 10 октября 2019

После этот вопрос У меня есть:

<mat-select [formControl]="tipoAttivitaSelect" multiple >
              <mat-option #selectAll [value]="0" (click)="all()">
                  All
                 </mat-option>
            <mat-option *ngFor="let attivita of mappaAttivita" [value]="attivita" (click)="opzioneSelezionata(attivita.value)">
              {{attivita.description}}
            </mat-option>
          </mat-select>

И в .ts

@ViewChild('selectAll') private selectAll: MatOption;
tipoAttivitaSelect: FormControl = new FormControl();
mappaAttivita =  [{
      value:"option1",
      description:"Option 1"
  },
  {
      value:"option2",
      description:"Option 2"
  }]

   ngOnInit(){
    this.selectAll.select();
    this.tipoAttivitaSelect.patchValue([...this.mappaAttivita.map(item => item), 0])
  }



all() {
    if (this.selectAll.selected) {
      this.tipoAttivitaSelect.patchValue([...this.mappaAttivita.map(item => item), 0])
    } else {
      this.tipoAttivitaSelect.patchValue([])
    }
  }

Я ожидаю, что когда я перейду на страницу, онивсе выбрано, но этого не происходит. Когда я вхожу на страницу, выбирается только опция «все», а остальные нет;затем, если я сниму флажок с опции all и затем вернусь обратно, все опции будут выбраны правильно.
Я не понимаю, почему это происходит, так как я делаю одну и ту же операцию как в ngOnInit, так и в методе "all ()"

1 Ответ

1 голос
/ 11 октября 2019

Вы должны выполнить select all в ngAfterViewInit, потому что вы запускаете функцию all() до того, как ваш mat-select загрузит значения. Это потому, что в угловом жизненном цикле значения выбора мата загружаются только после инициализации вида.

...