使用 ngx-scrollbar 获取 ngx-bootstrap 的选项卡内容

Posted

技术标签:

【中文标题】使用 ngx-scrollbar 获取 ngx-bootstrap 的选项卡内容【英文标题】:Use ngx-scrollbar for ngx-bootstrap's tab content 【发布时间】:2018-10-26 19:28:20 【问题描述】:

在我的项目中,我使用的是 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-scrollbar 并且滚动条很丑。我需要 div 的高度是底部的其余空间。这就是我使用 flexbox 的原因。

编辑: code in stackblitz

【问题讨论】:

【参考方案1】:

更新

试试这个

查看演示here

<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
  

【讨论】:

【参考方案2】:

您可以对ng-scrollbar 应用高度:

ng-scrollbar 
  height: 80vh;

Here is an edit of your stackblitz.

【讨论】:

很抱歉,但这对我没有用处。我正在使用 flexbox 来确保从用户屏幕的顶部到底部的“列视图”。作为用户视图的较长内容应该可以在 div 中滚动,而不是整个应用程序。

以上是关于使用 ngx-scrollbar 获取 ngx-bootstrap 的选项卡内容的主要内容,如果未能解决你的问题,请参考以下文章

使用行号获取最新记录的记录,使用连接获取分区

如何在快速路由器获取请求中从节点获取中使用获取

iframe简单使用 获取iframe 获取iframe 元素值 iframe获取父页面的信息

使用WatchConnectivity获取核心数据获取请求

FutureBuilder 能够获取数据,但使用 Flutter 多次获取数据

如何使用CODESYS的OPCUA库获取IP地址