Data Display & Other UI Components
July 29, 2026 · View on GitHub
Part of the
igniteui-angular-componentsskill hub. For app setup, providers, and import patterns — seesetup.md.
Contents
- List
- Tree
- Card
- Chips
- Avatar & Badge
- Icon
- Carousel
- Paginator
- Progress Indicators
- Chat (AI Chat Component)
List
import { IGX_LIST_DIRECTIVES } from 'igniteui-angular/list';
import { IgxAvatarComponent } from 'igniteui-angular/avatar';
import { IgxIconComponent } from 'igniteui-angular/icon';
<igx-list>
<igx-list-item [isHeader]="true">Contacts</igx-list-item>
@for (contact of contacts; track contact.id) {
<igx-list-item>
<igx-avatar igxListThumbnail [src]="contact.avatar" shape="circle"></igx-avatar>
<span igxListLineTitle>{{ contact.name }}</span>
<span igxListLineSubTitle>{{ contact.phone }}</span>
<igx-icon igxListAction (click)="call(contact)">phone</igx-icon>
</igx-list-item>
}
</igx-list>
Auxiliary directives for list items: igxListThumbnail, igxListAction, igxListLine, igxListLineTitle, igxListLineSubTitle.
Tree
import { IGX_TREE_DIRECTIVES } from 'igniteui-angular/tree';
<igx-tree selection="BiState" (nodeSelection)="onNodeSelect($event)">
@for (node of treeData; track node.id) {
<igx-tree-node [data]="node" [expanded]="node.expanded">
<igx-icon>folder</igx-icon>
{{ node.label }}
@for (child of node.children; track child.id) {
<igx-tree-node [data]="child">
<igx-icon>description</igx-icon>
{{ child.label }}
</igx-tree-node>
}
</igx-tree-node>
}
</igx-tree>
Selection modes: 'None', 'BiState', 'Cascading'.
Card
import { IgxCardComponent, IgxCardHeaderComponent, IgxCardContentDirective, IgxCardActionsComponent, IgxCardMediaDirective, IgxCardHeaderTitleDirective, IgxCardHeaderSubtitleDirective, IgxCardThumbnailDirective } from 'igniteui-angular/card';
import { IgxAvatarComponent } from 'igniteui-angular/avatar';
import { IgxButtonDirective, IgxIconButtonDirective } from 'igniteui-angular/directives';
import { IgxRippleDirective } from 'igniteui-angular/directives';
import { IgxIconComponent } from 'igniteui-angular/icon';
<igx-card>
<igx-card-media height="200px">
<img [src]="article.coverImage" />
</igx-card-media>
<igx-card-header>
<!-- igx-avatar inside igx-card-header is auto-detected as thumbnail -->
<igx-avatar [src]="author.photo" shape="circle"></igx-avatar>
<h3 igxCardHeaderTitle>{{ article.title }}</h3>
<h5 igxCardHeaderSubtitle>{{ author.name }}</h5>
</igx-card-header>
<igx-card-content>
<p>{{ article.excerpt }}</p>
</igx-card-content>
<igx-card-actions>
<button igxButton="flat" igxRipple>Read More</button>
<button igxIconButton="flat" igxRipple>
<igx-icon>favorite</igx-icon>
</button>
</igx-card-actions>
</igx-card>
Chips
import { IgxChipComponent, IgxChipsAreaComponent } from 'igniteui-angular/chips';
<igx-chips-area (reorder)="onChipsReorder($event)">
@for (tag of tags; track tag) {
<igx-chip [removable]="true" [selectable]="true" (remove)="removeTag(tag)">
{{ tag }}
</igx-chip>
}
</igx-chips-area>
Avatar & Badge
import { IgxAvatarComponent } from 'igniteui-angular/avatar';
import { IgxBadgeComponent } from 'igniteui-angular/badge';
<!-- Image avatar with badge overlay -->
<div class="avatar-badge-container">
<igx-avatar [src]="user.photo" shape="circle" size="large"></igx-avatar>
<igx-badge [type]="'success'" [icon]="'check'"></igx-badge>
</div>
<!-- Initials avatar -->
<igx-avatar initials="JD" shape="circle"></igx-avatar>
<!-- Icon avatar -->
<igx-avatar icon="person"></igx-avatar>
<!-- Standalone badge -->
<igx-badge [type]="'error'" [value]="unreadCount"></igx-badge>
// Required styles to position the badge as an overlay on the avatar
.avatar-badge-container {
position: relative;
display: inline-flex;
igx-badge {
position: absolute;
bottom: 0;
right: 0;
transform: translate(25%, 25%);
}
}
Avatar shapes: 'circle', 'rounded', 'square'. Sizes: 'small', 'medium', 'large', or custom CSS.
Badge types: 'primary', 'info', 'success', 'warning', 'error'.
Icon
import { IgxIconComponent, IgxIconService } from 'igniteui-angular/icon';
<!-- Material icon (default ligature-based) -->
<igx-icon>settings</igx-icon>
<igx-icon color="#e41c77">favorite</igx-icon>
<!-- SVG icon from a registered custom family -->
<igx-icon [family]="'my-icons'" [name]="'logo'"></igx-icon>
Register custom SVG icons in a service or component constructor:
export class AppComponent {
constructor() {
const iconService = inject(IgxIconService);
// From inline SVG string
iconService.addSvgIconFromText('logo', '<svg xmlns="..." viewBox="...">...</svg>', 'my-icons');
// From URL
iconService.addSvgIcon('arrow', '/assets/icons/arrow.svg', 'my-icons');
}
}
Carousel
import { IgxCarouselComponent, IgxSlideComponent } from 'igniteui-angular/carousel';
<igx-carousel [interval]="3000" [pause]="true" [loop]="true" [navigation]="true">
@for (slide of slides; track slide.id) {
<igx-slide>
<img [src]="slide.image" [alt]="slide.alt" />
<div class="slide-caption">{{ slide.caption }}</div>
</igx-slide>
}
</igx-carousel>
Important: Carousel uses Angular animations — ensure
provideAnimations()is present inapp.config.ts.
Paginator
import { IgxPaginatorComponent } from 'igniteui-angular/paginator';
<igx-paginator
[totalRecords]="totalItems()"
[perPage]="pageSize()"
[selectOptions]="[5, 10, 25, 50]"
(perPageChange)="onPageSizeChange($event)"
(pageChange)="onPageChange($event)">
</igx-paginator>
NOTE: For grid paging, attach
<igx-paginator>inside the grid element. See../../igniteui-angular-grids/references/paging-remote.mdfor grid-specific paging patterns.
Progress Indicators
import { IgxLinearProgressBarComponent } from 'igniteui-angular/progressbar';
import { IgxCircularProgressBarComponent } from 'igniteui-angular/progressbar';
<!-- Linear progress bar -->
<igx-linear-bar
[value]="uploadProgress()"
[max]="100"
[type]="'info'"
[striped]="true"
[animate]="true"
[textVisibility]="true">
</igx-linear-bar>
<!-- Circular progress (determinate) -->
<igx-circular-bar [value]="65" [max]="100" [animate]="true"></igx-circular-bar>
<!-- Circular progress (indeterminate) -->
<igx-circular-bar [indeterminate]="true"></igx-circular-bar>
Types for linear bar: 'default', 'info', 'success', 'warning', 'error'.
Chat (AI Chat Component)
Full doc in the MCP:
get_doc({ framework: "angular", name: "chat" })covers messages, attachments, quick replies, typing indicators, templates, and styling. Prefer it over writing chat code from memory.
import { IgxChatComponent, IgxChatMessageContextDirective, type IgxChatOptions } from 'igniteui-angular/chat';
import { MarkdownPipe } from 'igniteui-angular/chat-extras'; // template usage: message.text | fromMarkdown | async
Gotchas not obvious from the doc:
- The markdown pipe class is
MarkdownPipe(fromigniteui-angular/chat-extras) but its template name isfromMarkdown, and it is async — combine withAsyncPipe. - Custom templates (
messageHeader,messageContent,suggestionPrefix, …) are passed as one object via the[templates]input — collect theng-templaterefs withviewChildand assemble the object in aneffect()(orcomputed()).
See Also
setup.md— App providers, architecture, all entry pointsform-controls.md— Input Group, Combo, Select, Date/Time Pickers, Calendar, Checkbox, Radio, Switch, Sliderlayout.md— Tabs, Stepper, Accordion, Splitter, Navigation Drawerfeedback.md— Dialog, Snackbar, Toast, Bannerdirectives.md— Button, Ripple, Tooltip, Drag and Drop../../igniteui-angular-grids/references/paging-remote.md— Grid-specific paginator usage