Поместите nav-pills в заголовок карты и табуляцию в теле карты с помощью ngbTabSet - PullRequest
0 голосов
/ 25 мая 2018

Я бы хотел поместить nav-pills в заголовок карты и tab-content в теле карты , используя ngbTabSet .Но я не понимаю, как это сделать.

Вот пример того, чего я пытаюсь достичь (используя bootstrap.js)

Sample

<div class="card">
    <div class="card-header">
        <ul class="nav nav-pills" id="myTab" role="tablist">
            <li class="nav-item">
                <a class="nav-link active" id="home-tab" data-toggle="tab" href="#home" role="tab" aria-controls="home" aria-selected="true">Home</a>
            </li>
            <li class="nav-item">
                <a class="nav-link" id="profile-tab" data-toggle="tab" href="#profile" role="tab" aria-controls="profile" aria-selected="false">Profile</a>
            </li>
            <li class="nav-item">
                <a class="nav-link" id="contact-tab" data-toggle="tab" href="#contact" role="tab" aria-controls="contact" aria-selected="false">Contact</a>
            </li>
        </ul>
    </div>
    <div class="card-body">
        <div class="tab-content" id="myTabContent">
            <div class="tab-pane fade show active" id="home" role="tabpanel" aria-labelledby="home-tab">Home</div>
            <div class="tab-pane fade" id="profile" role="tabpanel" aria-labelledby="profile-tab">Profile</div>
            <div class="tab-pane fade" id="contact" role="tabpanel" aria-labelledby="contact-tab">Contact</div>
        </div>
    </div>
</div>

И вот что я уже попробовал (используя ng-bootstrap)

<div class="card">
    <div class="card-header">
        <ngb-tabset type="pills">
            <ngb-tab title="Home">
                <ng-template ngbTabContent>..</ng-template>
            </ngb-tab>
        </ngb-tabset>
    </div>
</div>

В итоге все внутри заголовок карты .Sample with ng-bootstrap

То же самое при использовании шаблона ref

<ng-template ngbTabContent>
  <ng-container *ngTemplateOutlet="template_ref"></ng-container>
</ng-template>

Я использую bootstrap 4.0 , ng-bootstrap 2.0 и Угловой 5,2

Кто-нибудь есть идеи о том, как это работает?

Ответы [ 2 ]

0 голосов
/ 25 мая 2018

Невозможно добиться этого с помощью ng-bootstrap 2.0.Шаблон для ngbTabset не позволяет этого.

Я решил создать свой собственный набор вкладок на основе ngbTabset и настроил их шаблон.


Здесь мой компонент

@Component({
    selector: 'card-tabset',
    templateUrl: './card-tabset.component.html',
})
export class CardTabsetComponent extends NgbTabset {

    constructor(config: NgbTabsetConfig) {
        super(config);
    }
}

и шаблон

<div class="card">
  <div class="card-header">
    <ul [class]="'nav nav-' + type + (orientation == 'horizontal'?  ' ' + justifyClass : ' flex-column')" role="tablist">
      <li class="nav-item" *ngFor="let tab of tabs">
        <a [id]="tab.id" class="nav-link" [class.active]="tab.id === activeId" [class.disabled]="tab.disabled" href (click)="!!select(tab.id)"
          role="tab" [attr.tabindex]="(tab.disabled ? '-1': undefined)" [attr.aria-controls]="(!destroyOnHide || tab.id === activeId ? tab.id + '-panel' : null)"
          [attr.aria-expanded]="tab.id === activeId" [attr.aria-disabled]="tab.disabled">
          {{tab.title}}
          <ng-template [ngTemplateOutlet]="tab.titleTpl?.templateRef"></ng-template>
        </a>
      </li>
    </ul>
  </div>
  <div class="card-body">
    <div class="tab-content">
      <ng-template ngFor let-tab [ngForOf]="tabs">
        <div class="tab-pane {{tab.id === activeId ? 'active' : null}}" *ngIf="!destroyOnHide || tab.id === activeId" role="tabpanel"
          [attr.aria-labelledby]="tab.id" id="{{tab.id}}-panel" [attr.aria-expanded]="tab.id === activeId">
          <ng-template [ngTemplateOutlet]="tab.contentTpl?.templateRef"></ng-template>
        </div>
      </ng-template>
    </div>
  </div>
</div>
0 голосов
/ 25 мая 2018

Я думаю, что вы не можете сделать это с помощью ng-bootstrap.Я сталкивался с той же проблемой с другими компонентами ng-bootstrap, которые точно не воспроизводят поведение начальной загрузки.

Однако я думаю, что вы можете легко реализовать эту функциональность с помощью raw bootstrap и Angular с ngSwitchнапример.

Дополнительная информация о ngSwitch: https://angular.io/api/common/NgSwitch

Незащищенная тема этой функции: https://github.com/ng-bootstrap/ng-bootstrap/issues/1567

...