Я бы посоветовал поместить слой пользовательского интерфейса поверх каждой записи строки.
Например, у вас есть элемент Audio
interface Audio {
name: string;
song: any;
}
, а затем расширить Audio как:
interface UIAudio extends Audio {
isPlaying: boolean;
}
Сопоставить источник данных
dataSource = dataSource as UIAudio[];
Теперь вы можете проверить в шаблоне isPlaying
, например:
Html:
<ng-container matColumnDef="Play">
<mat-header-cell *matHeaderCellDef>{{ 'MAIN.PLAY' | translate }}</mat-header-cell>
<mat-cell *matCellDef="let element">
<button id="play" class="float-right icon-link" mat-icon-button matTooltip="{{ 'MAIN.PLAY' | translate }}" (click)=" $event.stopPropagation(); playRecord(element)" >
<i class="fa fa-{{element.isPlaying ? 'pause' : 'play'}}" aria-hidden="true"></i>
</button>
</mat-cell>
</ng-container>
TS
playRecord(element) {
element.isPlaying = true;
}
Вы также можете создать компонент для Audio
.