Angular TabView

Angular TabView

·

5 min read

Angular TabView is a container component to group content with tabs.

Setup

Refer to PrimeNG setup documentation for download and installation steps for your environment.

Import

import {TabViewModule} from 'primeng/tabview';

Getting Started

Tabview element consists of one or more p-tabPanel elements. Header of the tab is defined using header attribute.

<p-tabView>
    <p-tabPanel header="Header 1">
       Content 1
    </p-tabPanel>
    <p-tabPanel header="Header 2">
        Content 2
    </p-tabPanel>
    <p-tabPanel header="Header 3">
        Content 3
    </p-tabPanel>
</p-tabView>

Dynamic Tabs

p-tabPanel components can be generated dynamically using ngFor, note that in this case due to an Angular issue selected property must be enabled manually.

<p-tabView>
    <p-tabPanel [header]="item.header" *ngFor="let item of items; let i = index" [selected]="i == 0">
        {{item.content}}
    </p-tabPanel>
</p-tabView>

Selection

First tab is selected by default, to customize this enable selected property on another panel.

<p-tabView>
    <p-tabPanel header="Header 1">
       Content 1
    </p-tabPanel>
    <p-tabPanel header="Header 2" [selected]="true">
        Content 2
    </p-tabPanel>
    <p-tabPanel header="Header 3">
        Content 3
    </p-tabPanel>
</p-tabView>

Closable

When closable attribute is enabled, an icon is displayed to close the tab. onClose event is fired when a tab is closed.

<p-tabPanel header="Header Text" [closable]="true">
    Content 1
</p-tabPanel>

If you'd like to control whether a tab can be closed, enable controlClose property which gives you the control to decide at onClose event. In this case, the event gets a 3rd parameter called close callback and invoking this function actually closes the tab.

<p-tabView [controlClose]="true" (onClose)="handleClose($event)">
    <p-tabPanel header="Header Text" [closable]="true">
        Content 1
    </p-tabPanel>
</p-tabView>
handleClose(e) {
   if (condition)
       e.close();
}

Disabled

A tab can be disabled to prevent the content to be displayed by setting the disabled property on a panel.

<p-tabPanel header="Header Text" [disabled]="true">
    Content 1
</p-tabPanel>

Icons

Icons can be placed at left and right of a header using leftIcon and rightIcon properties of tabPanel.

<p-tabPanel header="Header Text" leftIcon="pi-bell-" rightIcon="pi-bookmark">;
    Content
</p-tabPanel>

Header Template

Header of a tab supports templating to place custom html content instead of strings as well.

<p-tabPanel>
    <ng-template pTemplate="header">Custom Content</ng-template>
</p-tabPanel>

Programmatic Control

Tabs can be controlled programmatically using activeIndex property that defines the index of the active tab.

<p-button icon="pi pi-chevron-up" (click)="openPrev()"></p-button>
<p-button icon="pi pi-chevron-down" (click)="openNext()"></p-button>

<p-tabView [(activeIndex)]="index">
    <p-tabPanel header="Header 1">
        Content 1
    </p-tabPanel>
    <p-tabPanel header="Header 2">
        Content 2
    </p-tabPanel>
    <p-tabPanel header="Header 3">
        Content 3
    </p-tabPanel>
</p-tabView>
export class TabViewDemo {

    index: number = 0;

    openNext() {
        this.index = (this.index === 2) ? 0 : this.index + 1;
    }

    openPrev() {
        this.index = (this.index === 0) ? 2 : this.index - 1;
    }

}

Lazy Loading

Lazy loading helps initial load performance by only initializing the active tab, inactive tabs are not initialized until they get selected. A lazy loaded tabpanel contents are cached by default so that upon reselection, they are not created again. You may use cache property on TabPanel to configure this behavior. A TabPanel is specified as lazy when there is a ngTemplate with pTemplate="content" in it.

<p-tabView>
    <p-tabPanel header="Header 1">
        Content 1
    </p-tabPanel>
    <p-tabPanel header="Header 2">
        <ng-template pTemplate="content">
            Complex Content to Lazy Load
        </ng-template>
    </p-tabPanel>
    <p-tabPanel header="Header 3">
        <ng-template pTemplate="content">
            Complex Content to Lazy Load
        </ng-template>
    </p-tabPanel>
</p-tabView>

Theming

TabView supports various themes featuring Material, Bootstrap, Fluent as well as your own custom themes via the Designer tool.

Resources

Visit the PrimeNG TabView showcase for demos and documentation.