Итак, после некоторой помощи от @phucnh и некоторого поиска в Google, я смог создать код, который позволяет TurboTable принимать весь родительский размер и правильно отображать / скрывать полосы прокрутки:
https://stackblitz.com/edit/primeng-scrollable-table-fit-parent
В основном, он содержит два хака:
1) Нам нужно наблюдать за изменениями родительского размера и заставить Angular переоценивать «scrollHeight» по этому коду:
ngAfterViewInit(): void {
new ResizeObserver(() => this.zone.run(() => this.onResize()))
.observe(this.container.nativeElement);
}
private onResize(): void {
// HACK: mark "scrollHeight" dirty, so it's re-evaluated.
if (this.table.scrollHeight.endsWith(' ')) {
this.table.scrollHeight = this.table.scrollHeight.slice(0, -1);
} else {
this.table.scrollHeight += ' ';
}
}
2) Чтобы обойтись без выравнивания ячейки заголовка, когда полоса прокрутки появляется / исчезает, нам нужно сделать несколько грязных взломов (вдохновлено https://stackblitz.com/edit/primeng-dynamic-scrollable):
// HACK: automatically re-align table header when resized. Borrowed the idea from https://stackblitz.com/edit/primeng-dynamic-scrollable
const scrollableViewNgAfterViewInit = ScrollableView.prototype.ngAfterViewInit;
ScrollableView.prototype.ngAfterViewInit = function() {
scrollableViewNgAfterViewInit.call(this);
new ResizeObserver(() => {
this.alignScrollBar();
}).observe(this.scrollBodyViewChild.nativeElement);
};
Это добилось цели.