установите и снимите все флажки сразу

#javascript #html #angular

#javascript #HTML #angular

Вопрос:

Я использую свое приложение angular. У меня есть несколько флажков. Я хочу использовать on checkbox для выбора и снятия всех оставшихся флажков. мои данные взяты из резервной копии. Пожалуйста, объясните мне, как это реализовать.

HTML

 <ul>
  <li> <input type="checkbox" [(ngModel)]="selectedAll" (change)="selectAll();"/>
  </li>
  <li *ngFor="let n of names"> 
  <input type="checkbox" [(ngModel)]="n.checked" (click)="onChecked($event, n.test);">
  {{n.name}}
  </li>
</ul>
  

TS

 onChecked(event, value) {
   if (event.target.checked) {
     this.data.push(value);
   } else {
     const item = this.data.findIndex(x => x === value);
       this.data.splice(this.data.indexOf(item), 1);
   }
  }
  

Ответ №1:

В демо приведенном ниже коде отмечен, сняты все

  selectAll(){
      this.names.forEach(n=>{n.checked=this.selectedAll});
    }
  

или

 selectAll(){
       this.names.map(a=>a.checked=this.selectedAll);
    }
  

Ответ №2:

Если ваш selectedAll логический, вы можете просто использовать метод, подобный этому

 selectAll() {
     this.names.forEach(name => {
       name.checked = this.selectedAll;
    });
}
  

И в вашем html

 <li> <input type="checkbox" [(ngModel)]="selectedAll" (change)="selectAll($event);"/></li>
  

Ответ №3:

component.html

 <ul>
  <li> <input type="checkbox" [(ngModel)]="checkAll" (change)="selectAll(checkAll);"/> {{ checkAll ? 'Deselect All': 'Select All'}}
  </li>
  <li *ngFor="let n of names"> 
  <input type="checkbox" [(ngModel)]="n.checked" (click)="onChecked(n);">
  {{n.name}}
  </li>
</ul>
  

compoenent.ts

 import { Component, VERSION } from '@angular/core';

@Component({
  selector: 'my-app',
  templateUrl: './app.component.html',
  styleUrls: [ './app.component.css' ]
})
export class AppComponent  {
  name = 'Angular '   VERSION.major;
  checkAll: false;
  names = [
    {
      name: 'name 1',
      checked : false
    },
     {
      name: 'name 2',
      checked : false
    },
     {
      name: 'name 3',
      checked : false
    },
     {
      name: 'name 4',
      checked : false
    }
  ];


  selectAll(checkAll) {
    if(checkAll) {
       this.names.forEach((element)=> {
      element.checked= true;
    });
    } else {
       this.names.forEach((element)=> {
      element.checked= false;
    });
    }
   
  }

  onChecked(obj) {
    const index = this.names.indexOf(obj);
    this.names[index].checked = true;
  }
}
  

Комментарии:

1. Вот рабочая демонстрация stackblitz.com/edit/santosh-angular-check-all

Ответ №4:

Вам необходимо обновить массив

 selectAll() {
   this.names.forEach(name => name.checked = selctedAll)
   // bulk update request
}
  

вы можете выполнить запрос на массовое обновление после forEach() завершения.