Angular 2: Get Values of Multiple Checked Checkboxes Angular 2: Get Values of Multiple Checked Checkboxes angular angular

Angular 2: Get Values of Multiple Checked Checkboxes


Here's a simple way using ngModel (final Angular 2)

<!-- my.component.html --><div class="form-group">    <label for="options">Options:</label>    <div *ngFor="let option of options">        <label>            <input type="checkbox"                   name="options"                   value="{{option.value}}"                   [(ngModel)]="option.checked"/>            {{option.name}}        </label>    </div></div>

// my.component.ts@Component({ moduleId:module.id, templateUrl:'my.component.html'})export class MyComponent {  options = [    {name:'OptionA', value:'1', checked:true},    {name:'OptionB', value:'2', checked:false},    {name:'OptionC', value:'3', checked:true}  ]  get selectedOptions() { // right now: ['1','3']    return this.options              .filter(opt => opt.checked)              .map(opt => opt.value)  }}


I have find a solution thanks to Gunter! Here is my whole code if it could help anyone:

<div class="form-group">            <label for="options">Options :</label>            <div *ngFor="#option of options; #i = index">                <label>                    <input type="checkbox"                           name="options"                           value="{{option}}"                           [checked]="options.indexOf(option) >= 0"                           (change)="updateCheckedOptions(option, $event)"/>                    {{option}}                </label>            </div>        </div>

Here are the 3 objects I'm using:

options = ['OptionA', 'OptionB', 'OptionC'];optionsMap = {        OptionA: false,        OptionB: false,        OptionC: false,};optionsChecked = [];

And there are 3 useful methods:

1. To initiate optionsMap:

initOptionsMap() {    for (var x = 0; x<this.order.options.length; x++) {        this.optionsMap[this.options[x]] = true;    }}

2. to update the optionsMap:

updateCheckedOptions(option, event) {   this.optionsMap[option] = event.target.checked;}

3. to convert optionsMap into optionsChecked and store it in options before sending the POST request:

updateOptions() {    for(var x in this.optionsMap) {        if(this.optionsMap[x]) {            this.optionsChecked.push(x);        }    }    this.options = this.optionsChecked;    this.optionsChecked = [];}


create a list like :-

this.xyzlist = [  {    id: 1,    value: 'option1'  },  {    id: 2,    value: 'option2'  }];

Html :-

<div class="checkbox" *ngFor="let list of xyzlist">            <label>              <input formControlName="interestSectors" type="checkbox" value="{{list.id}}" (change)="onCheckboxChange(list,$event)">{{list.value}}</label>          </div>

then in it's component ts :-

onCheckboxChange(option, event) {     if(event.target.checked) {       this.checkedList.push(option.id);     } else {     for(var i=0 ; i < this.xyzlist.length; i++) {       if(this.checkedList[i] == option.id) {         this.checkedList.splice(i,1);      }    }  }  console.log(this.checkedList);}