Я думаю, что самый простой способ сделать это - использовать пользовательский компонент .Вы можете указать столбец, в котором компонент будет отображаться в каждой строке, и инкапсулировать поведение воспроизведения / остановки в этом компоненте.
Сначала создайте пользовательский компонент , например MediaControlComponent
:
@Component({
selector: 'ngx-media-control',
template: `<a href="javascript:void(0)" (click)="onClick()">
<i *ngIf="!isPlaying" class="nb-play"></i>
<i *ngIf="isPlaying" class="nb-square"></i></a>`,
})
export class MediaControlComponent implements OnInit {
public isPlaying: boolean;
public renderValue: string;
@Input() value: string | number;
@Input() rowData: any;
@Output() save: EventEmitter<any> = new EventEmitter();
constructor() {
}
ngOnInit() {
this.renderValue = this.value.toString().toUpperCase();
}
onClick() {
this.isPlaying = this.isPlaying ? false : true;
this.save.emit(this.rowData);
}
}
Убедитесь, что вы добавили этот компонент в свой модуль , как в imports
, так и в entryComponents
.
Затем в свою ng2-smart-таблицу настройки , добавление столбца :
mediaControl: {
title: 'mediaControl',
type: 'custom',
renderComponent: MediaControlComponent,
onComponentInitFunction: (instance: any) => {
instance.save.subscribe(row => {
// Do something (you have the row information in the `row` variable).
});
}
},
Вот и все! Вы получите желаемое поведение для кнопки воспроизведения / остановки, а также способ заставить что-то произойти, когда нажата кнопка воспроизведения / остановки.
Примечание. Я не выполняю рендеринг пользовательского компонента в части action
настроек ng2-smart-tableиз-за того, что он не работает, когда я попробовал (вместо этого я отображаю его в столбце).Если вы можете заставить его работать, продолжайте.