Я хочу получить все элементы флажков, когда пользователь выбирает, теперь я получаю данные Но проблема в том, что флажок не меняется, я имею в виду, что когда я нажимаю флажок, если начальное состояние отмечено, всегда оставаться отмеченным и наоборот наоборот.
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);
}





Я думаю, вы слишком усложняете.
Измените свой массив так, чтобы каждая запись имела свойство 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.info(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>
Было бы проще использовать реактивные формы:
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>
Спасибо за ответ. Возможно ли использование formControlName вместо ngModel?