Вы можете использовать setAttribute()
из Renderer2
и ссылку на шаблон следующим образом:
В шаблоне добавить #myImg
к img
тегу:
<img *ngIf="seat.booked===false" src="assets/st.png #myImg (click)="selectedSeat(myImg, seat.id)">
В компоненте (.ts), введите Renderer2
и используйте его в методе selectedSeat
:
constructor(private renderer: Renderer2){}
selectedSeat(seletctedSeat: ElementRef, id) {
this.renderer.setAttribute(seletctedSeat.nativeElement, 'id', 'selected');
}
! НО!
Я думаю, что присвоение атрибута id
не правильный способ сделать это.Идентификатор должен быть уникальным по своей природе, поэтому вы присваиваете один и тот же идентификатор нескольким элементам .Это звучит неправильно.Я думаю, вам следует изменить класс CSS, если вы хотите изменить стиль, но не применять логику (например, делать что-то с выбранным местом) со следующими параметрами:
В файле .ts:
selectedSeat(seletctedSeat: ElementRef, id) {
this.renderer.addClass(seletctedSeat.nativeElement, 'selected');
}
В CSS:
.selected {
background-color: #614056;
}
ОБНОВЛЕНИЕ
Вы можете создать массив и добавить к нему выбранные идентификаторы.Затем проверьте, содержит ли массив seat.id
:
В шаблоне:
<img *ngIf="seat.booked===false" src="assets/st.png"
[ngClass]="selectedSeatList.includes(seat.id) ? 'selected' : 'available'" (click)="toggleSelection(seat.id)">
В файле компонента (.ts):
selectedSeatList: Array<number> = [];
toggleSelection = (seatID) => {
if(this.selectedSeatList.includes(seatID)){
this.selectedSeatList = this.selectedSeatList.filter(id => id !== seatID);
}else{
this.selectedSeatList.push(seatID);
}
}