J'ai développé un composant d'onglet personnalisé en utilisant Angular 2 qui fonctionne correctement. Ceci est l'utilisation de celui-ci.Angular 2 chargeant dynamiquement les onglets lorsque l'en-tête clique
<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>
Le problème est tous les composants de l'onglet se chargent lorsque la charge de la vue.
L'implémentation de mon onglet est la suivante.
nous-tab-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>
nous-tab-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;
}
je dois charger chaque composant lorsque je clique sur l'en-tête des onglets chacun. Je sème que NgComponentOutlet peut utiliser dans ce genre de situations. Mais n'a pas pu avoir une idée de la façon de mettre en œuvre.
Utilisez les 'composants dynamiques 'ou' chargement paresseux 'de composants –
Pour ce problème, nous avons plusieurs façons de le résoudre, je vous suggère de chercher les [onglets material2] (https://github.com/angular/material2/tree/master/src/lib/tabs) qui a une solution implémentée. –
vous pouvez utiliser * ngIf = "active" au lieu de [hidden] de cette façon, il n'insèrera le composant que s'il est vrai – fastAsTortoise