角度2を使用してカスタムタブコンポーネントを開発しました。 これはその使用方法です。角2は、ヘッダーをクリックしたときにタブを動的に読み込みます。
<us-tab-verticle>
<vtab-content [tabTitle]="'Basic Information'"><basic-info> </basic-info></vtab-content>
<vtab-content [tabTitle]="'VAT Settings'"><vat-settings> </vat-settings></vtab-content>
<vtab-content [tabTitle]= "'Economy Settings'"><economy-settings> </economy-settings></vtab-content>
<vtab-content [tabTitle]="'Access Profiles'"><access-profiles> </access-profiles></vtab-content>
</us-tab-verticle>
問題は、ビューの読み込み時にすべてのタブコンポーネントが読み込まれることです。
マイタブの実装は次のとおりです。
たち-タブverticle.component.html
<div class="v-tabs">
<div class="v-tabs-col v-tabs-left">
<ul class="nav nav-v-tabs flex-column" role="tablist">
<li class="nav-v-item" *ngFor="let tab of tabs" (click)="selectTab(tab)">
<a [class.active]="tab.active" class="nav-v-link" data-toggle="tab" href="#" role="tab">{{tab.title}}</a>
</li>
</ul>
</div>
<div class="v-tabs-col v-tabs-fill">
<div class="v-tabs-content">
<div>
<ng-content></ng-content>
</div>
</div>
</div>
たち-タブverticle.component.ts
import { Component, ContentChildren, QueryList, AfterContentInit } from '@angular/core';
import { VtabContentComponent } from './vtab-content/vtab-content.component';
@Component({
selector: 'us-tab-verticle',
templateUrl: './us-tab-verticle.component.html',
styleUrls: ['./us-tab-verticle.component.scss']
})
export class UsTabVerticleComponent implements AfterContentInit {
@ContentChildren(VtabContentComponent) tabs: QueryList<VtabContentComponent>;
// contentChildren are set
ngAfterContentInit() {
// get all active tabs
const activeTabs = this.tabs.filter((tab) => tab.active);
// if there is no active tab set, activate the first
if (activeTabs.length === 0) {
this.selectTab(this.tabs.first);
}
}
selectTab(tab: VtabContentComponent) {
// deactivate all tabs
this.tabs.toArray().forEach(tab => tab.active = false);
// activate the tab the user has clicked on.
tab.active = true;
}
}
vtab-content.component.html
<div class="tab-content v-tab-content align-content-stretch">
<div [hidden]="!active" class="tab-pane active" role="tabpanel">
<ng-content></ng-content>
</div>
</div>
vtab-content.component.ts
import { Component, Input } from '@angular/core';
import { NgComponentOutlet } from '@angular/common';
@Component({
selector: 'vtab-content',
templateUrl: './vtab-content.component.html',
styleUrls: ['./vtab-content.component.scss']
})
export class VtabContentComponent {
@Input('tabTitle') title: string;
@Input() active = false;
}
は、私は、各タブのヘッダをクリックすると、各コンポーネントをロードする必要があります。 私はこのような状況にNgComponentOutletを使うことができます。しかし、どのように実装するか考えられなかった。
エンティティの「動的コンポーネント」または「遅延読み込み」を使用 –
この問題については、解決する方法がたくさんあります。[material2 tabs](https://github.com/angular/material2/tree/master/src/lib/tabs)にはソリューションが実装されています。 –
あなたは* ngIf = "active"をtrueのときにコンポーネントを挿入するように[hidden]の代わりに使うことができます – fastAsTortoise