В своем проекте я использую bootstrap 4 и ngx-bootstrap. Теперь мне нужно создать компонент, который будет включать в себя 2 прокручиваемых div, переключаемых вкладками.
Я хотел бы показать пример приложения в stackblitz, но не могу его создать.
Итак, вот мой компонент, в котором я хочу разместить эти вкладки:
<div class = "d-flex flex-column h-100">
<div class = "border-bottom align-items-center d-flex flex-shrink-0 pr-3 pl-3" style = "height: 60px !important;">
<input type = "text" class = "form-control" id = "search" placeholder = "Search...">
</div>
<tabset [justified] = "true">
<tab heading = "Title 1">
<ng-scrollbar [autoHide] = "true">
<app-foo-list></app-foo-list>
</ng-scrollbar>
</tab>
<tab class = "" heading = "Title 2">
<ng-scrollbar [autoHide] = "true">
<app-foo-list></app-foo-list>
</ng-scrollbar>
</tab>
</tabset>
</div>
В компоненте AppFooList я размещу список элементов. Например, это будет похоже на следующий код:
hiiiiiiii <br>
hiiiiiiii <br>
hiiiiiiii <br>
hiiiiiiii <br>
...
Можете ли вы помочь мне исправить мой код, чтобы он работал правильно? Ngx-scrollbar не работает с содержимым вкладок. Все мои попытки заканчивались прокруткой всего приложения, потому что контент имеет большую высоту, чем остальная часть приложения, иначе контент будет прокручиваться, но полоса прокрутки ngx не применялась, а полоса прокрутки была некрасивой. Мне нужно, чтобы высота div была остальным пространством внизу. Это причина, по которой я использую flexbox.
Обновлено: код в stackblitz






Вы можете применить высоту к ng-scrollbar:
ng-scrollbar {
height: 80vh;
}
Вот редакция вашего stackblitz.
Обновлено
Попробуй это
<div class = "d-flex flex-column h-100">
<div class = "border-bottom align-items-center d-flex flex-shrink-0 pr-3 pl-3" style = "height: 60px !important;">
<input type = "text" class = "form-control" id = "search" placeholder = "Search...">
</div>
<tabset [justified] = "true">
<tab heading = "Title 1" [ngStyle] = "{'height':'calc(100vh - ' + offsetHeightVal + 'px)'}">
<ng-scrollbar [autoHide] = "true">
<app-foo-list></app-foo-list>
</ng-scrollbar>
</tab>
<tab class = "" heading = "Title 2" [ngStyle] = "{'height':'calc(100vh - ' + offsetHeightVal + 'px)'}">
<ng-scrollbar [autoHide] = "true">
<app-foo-list></app-foo-list>
</ng-scrollbar>
</tab>
</tabset>
</div>
app.component.ts
import { Component, AfterViewInit } from '@angular/core';
@Component({
selector: 'my-app',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {
name = 'Angular 6';
offsetHeightVal: number; //default value
offset(el) {
var rect = el.getBoundingClientRect(),
scrollLeft = window.pageXOffset || document.documentElement.scrollLeft,
scrollTop = window.pageYOffset || document.documentElement.scrollTop;
return { top: rect.top + scrollTop, left: rect.left + scrollLeft }
}
ngAfterViewInit() {
this.offsetHeightVal = this.offset(document.querySelector('.tab-content')).top
}
}
Извините, но для меня это бесполезно. Я использую flexbox, чтобы обеспечить "вид столбцов" сверху вниз на экране пользователя. И более длинный контент в виде пользовательского представления должен прокручиваться в div, а не во всем приложении.