У меня есть компонент Angular 2, который загружает и показывает список флажков пользователю в пределах *ngFor
, список также можно отфильтровать на основе ключа. Мне нужно выбрать все отфильтрованные элементы и добавить их в массив. Я могу проверить все флажки, но проблема в том, что при неправильном изменении checked
событие change
не срабатывает, любая идея, как это исправить?
шаблон:
<div class="form-group">
<input type="text" class="form-control" id="stringKeyFilter" placeholder="Key Filter"
[(ngModel)]="keyFilter">
</div>
<table class="table table-striped table-hover">
<thead>
<tr>
<th>Id</th>
<th style="width: 150px;">Action</th>
</tr>
</thead>
<tbody>
<tr *ngFor="let device of devices| stringFilter: keyFilter">
<td>
{{device.$key}}
</td>
<td>
<div class="checkbox">
<label> <input type="checkbox"
[checked]="selectAll || selectedDevices.indexOf(device.$key) > -1"
(change)="updateSelectedDevices(device.$key, $event)" > View</label>
</div>
</td>
</tr>
</tbody>
</table>
<div class="btn-group pull-right">
<button type="button" class="btn btn-primary" (click)="selectAllDevices()">Select All</button>
<button type="button" class="btn btn-default" (click)="deselectAllDevices()">Deselect All
</button>
</div>
компонент:
@Component({
moduleId: module.id,
selector: 'device-list',
template: template
})
export class DeviceListComponent implements OnInit {
devicesObservable: FirebaseListObservable<Device[]>;
devices: Device[] = [];
isLoading: boolean = true;
selectedDevices: string[] = [];
selectAll: boolean = false;
allCtrl: any;
keyFilter: string = '';
constructor(private af: AngularFire) {
}
ngOnInit(): void {
this.devicesObservable = this.af.database.list('/online', {
query: {
orderByKey: true,
}
});
this.devicesObservable.subscribe((devicesData)=> {
this.devices = devicesData;
this.isLoading = false
});
}
updateSelectedDevices(deviceId: string, event): void {
if (event.target.checked) {
this.selectedDevices.push(deviceId);
}
else {
_.pull(this.selectedDevices, deviceId);
}
}
loadingDeviceDetail(loading: boolean): void {
this.isLoading = loading;
}
selectAllDevices(): void {
this.selectAll = true;
}
deselectAllDevices(): void {
this.selectAll = false;
this.selectedDevices = [];
}
}