Как получить данные флажка в угловом материале - PullRequest
0 голосов
/ 18 мая 2018

Я хочу получить все элементы флажков, когда пользователь выбирает, теперь я получаю данные Но проблема в том, что флажок не меняется, я имею в виду, что когда я нажимаю флажок, если проверено исходное состояние, всегда остаютсяпроверено и наоборот.

this.settings_data = ["one", "two", "three", "four", "five"];

<div class="settings_head" fxFlex="50" *ngFor="let item of settings_data">
  <mat-checkbox formControlName="settingsCheckboxvalues" (ngModelChange)="seleteditems($event,item)">{{item}}</mat-checkbox>
</div>



seleteditems(event, value) {
  this.allitems.push(value);
}

Ответы [ 2 ]

0 голосов
/ 18 мая 2018

Использование реактивных форм было бы проще:

this.form = this.fb.group({
      'one': false,
      'two': false,
      'three': false,
      'four': false
    })
    this.controlNames = Object.keys(this.form.controls).map(_=>_)
    this.selectedNames$ = this.form.valueChanges.pipe(map(v => Object.keys(v).filter(k => v[k])));

Шаблон:

<ng-container [formGroup]="form">
  <mat-checkbox *ngFor="let controlName of controlNames" [formControlName]="controlName">{{controlName}}</mat-checkbox>
</ng-container>

Вот редактирование вашего стекаблиц.

0 голосов
/ 18 мая 2018

Я думаю, вы слишком усложняете вещи.

Измените ваш массив так, чтобы у каждой записи было свойство name и checked, и свяжите с ними флажки с помощью [(ngModel)]


ts

array = [
    {
      name: 'one',
      checked: false
    },
    {
      name: 'two',
      checked: false
    },
    {
      name: 'three',
      checked: false
    },
    {
      name: 'four',
      checked: false
    },
    {
      name: 'five',
      checked: false
    }
  ]
  getCheckboxes() {
    console.log(this.array.filter(x => x.checked === true).map(x => x.name));
  }

html

<div *ngFor="let item of array">
    <mat-checkbox [(ngModel)]="item.checked" (change)="getCheckboxes()">{{item.name}}</mat-checkbox>
</div>

Демо

...