一键导入
igniteui-angular-components
Build Angular apps with Ignite UI standalone components, form controls, layout, and data display
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Build Angular apps with Ignite UI standalone components, form controls, layout, and data display
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Cell editing, row editing, batch editing, sorting, filtering, grouping, paging, remote data, and virtualization patterns for Ignite UI Angular grids
Build data-rich Angular apps with Ignite UI Grid, Tree Grid, Hierarchical Grid, and Pivot Grid
Customize Ignite UI components styling using the igniteui-theming MCP server for AI-assisted theming
| name | igniteui-angular-components |
| description | Build Angular apps with Ignite UI standalone components, form controls, layout, and data display |
| user-invokable | true |
This skill teaches AI agents how to properly use Ignite UI for Angular UI components in Angular 20+ applications. It covers standalone component imports, the full component catalog, key APIs for the most-used components, form integration, overlay-based components, layout components, and common patterns.
@angular/cli installedigniteui-angular or @infragistics/igniteui-angular installed.ng add igniteui-angular, or ng add @infragistics/igniteui-angular for licensed users — both packages share the same entry-point structureigniteui-angular-theming skill for instructions.AGENT INSTRUCTION: Before adding any Ignite UI component, verify that
app.config.ts(orapp.module.ts) contains the required providers listed below. MissingprovideAnimations()is the most common cause of runtime errors with overlay and animated components (Dialog, Combo, Select, Date Picker, Snackbar, Toast, Banner, Navigation Drawer, Dropdown). Always check and updateapp.config.tswhen scaffolding a new feature.
app.config.ts)import { ApplicationConfig, importProvidersFrom } from '@angular/core';
import { provideAnimations } from '@angular/platform-browser/animations';
import { HammerModule } from '@angular/platform-browser';
import { provideRouter } from '@angular/router';
import { provideIgniteIntl } from 'igniteui-angular/core'; // '@infragistics/igniteui-angular/core' for licensed
export const appConfig: ApplicationConfig = {
providers: [
provideAnimations(), // REQUIRED — all overlay and animated components
importProvidersFrom(HammerModule), // REQUIRED — touch gesture support (Slider, Drag & Drop)
provideRouter(appRoutes),
provideIgniteIntl(), // recommended — localization for grids, date/time pickers, etc.
]
};
| Provider | Package | Required for |
|---|---|---|
provideAnimations() | @angular/platform-browser/animations | All overlay and animated components — Dialog, Combo, Select, Dropdown, Date/Time Picker, Snackbar, Toast, Banner, Navigation Drawer, Carousel, Overlay service |
importProvidersFrom(HammerModule) | @angular/platform-browser | Touch gestures — Slider, Drag & Drop, swipe interactions |
provideIgniteIntl() | igniteui-angular/core | Localization for grids, date/time pickers, and other components that display formatted values |
provideAnimationsAsync()is an alternative toprovideAnimations()that lazy-loads the animations module — prefer it for SSR or when optimizing initial bundle size:import { provideAnimationsAsync } from '@angular/platform-browser/animations/async';
All Ignite UI components are standalone — no NgModules needed. Import components directly into your component's imports array:
import { Component } from '@angular/core';
// Open-source package
import { IgxButtonDirective } from 'igniteui-angular/button';
import { IgxDialogComponent } from 'igniteui-angular/dialog';
// Licensed package — identical structure, different prefix
// import { IgxButtonDirective } from '@infragistics/igniteui-angular/button';
// import { IgxDialogComponent } from '@infragistics/igniteui-angular/dialog';
@Component({
selector: 'app-example',
imports: [IgxButtonDirective, IgxDialogComponent],
templateUrl: './example.component.html',
changeDetection: ChangeDetectionStrategy.OnPush
})
export class ExampleComponent {}
Each component has its own entry point. Always import from the specific entry point, NOT from the root barrel.
This rule applies to both the open-source and licensed packages:
// CORRECT — open-source package, tree-shakeable
import { IgxComboComponent } from 'igniteui-angular/combo';
import { IgxDatePickerComponent } from 'igniteui-angular/date-picker';
// CORRECT — licensed package, same entry-point structure
import { IgxComboComponent } from '@infragistics/igniteui-angular/combo';
import { IgxDatePickerComponent } from '@infragistics/igniteui-angular/date-picker';
// AVOID — pulls in entire library (wrong for BOTH package variants)
import { IgxComboComponent, IgxDatePickerComponent } from 'igniteui-angular';
import { IgxComboComponent, IgxDatePickerComponent } from '@infragistics/igniteui-angular';
AGENT INSTRUCTION: Before generating import statements, check
package.jsonto determine which package variant is installed (igniteui-angularor@infragistics/igniteui-angular). Use that package name as the prefix for all entry-point imports. For example, if the project uses@infragistics/igniteui-angular, every import path must use@infragistics/igniteui-angular/<entry-point>— never the root barrel.
For complex components with many sub-directives, use the provided directive arrays. Replace igniteui-angular with @infragistics/igniteui-angular in all entry-point paths if using the licensed package:
| Token | Entry Point | Includes |
|---|---|---|
IGX_GRID_DIRECTIVES | igniteui-angular/grids/grid | Grid, columns, toolbar, filtering, selection, paginator, validators |
IGX_TREE_GRID_DIRECTIVES | igniteui-angular/grids/tree-grid | Tree Grid + all grid sub-directives |
IGX_HIERARCHICAL_GRID_DIRECTIVES | igniteui-angular/grids/hierarchical-grid | Hierarchical Grid + row island |
IGX_PIVOT_GRID_DIRECTIVES | igniteui-angular/grids/pivot-grid | Pivot Grid |
IGX_INPUT_GROUP_DIRECTIVES | igniteui-angular/input-group | Input group + label, hint, prefix, suffix |
IGX_TABS_DIRECTIVES | igniteui-angular/tabs | Tabs + tab item, header, content |
IGX_STEPPER_DIRECTIVES | igniteui-angular/stepper | Stepper + step |
IGX_EXPANSION_PANEL_DIRECTIVES | igniteui-angular/expansion-panel | Panel + header, body |
IGX_LIST_DIRECTIVES | igniteui-angular/list | List + list item |
IGX_TREE_DIRECTIVES | igniteui-angular/tree | Tree + tree node |
<igx-input-group type="border">
<igx-prefix><igx-icon>person</igx-icon></igx-prefix>
<label igxLabel>Username</label>
<input igxInput name="username" type="text" [(ngModel)]="username" />
<igx-suffix><igx-icon>clear</igx-icon></igx-suffix>
<igx-hint>Enter your username</igx-hint>
</igx-input-group>
Types: line (default), border, box, search.
Docs: Combo Component
<igx-combo
[data]="cities"
[valueKey]="'id'"
[displayKey]="'name'"
[groupKey]="'region'"
placeholder="Select cities"
[allowCustomValues]="false"
[(ngModel)]="selectedCityIds">
</igx-combo>
Key inputs: [data], [valueKey], [displayKey], [groupKey], [placeholder], [allowCustomValues], [filterFunction], [itemsMaxHeight], [type].
Events: (opening), (opened), (closing), (closed), (selectionChanging), (addition), (searchInputUpdate).
Docs: Combo — Single Selection
<igx-simple-combo
[data]="countries"
[valueKey]="'code'"
[displayKey]="'name'"
placeholder="Select country"
[(ngModel)]="selectedCountry">
</igx-simple-combo>
Same API as igx-combo but restricted to single selection.
Docs: Select Component
<igx-select [(ngModel)]="selectedRole" placeholder="Choose role">
@for (role of roles; track role.id) {
<igx-select-item [value]="role.id">{{ role.name }}</igx-select-item>
}
</igx-select>
Docs: Date Picker
<igx-date-picker
[(ngModel)]="selectedDate"
[minValue]="minDate"
[maxValue]="maxDate"
[hideOutsideDays]="true"
[displayMonthsCount]="2">
</igx-date-picker>
Implements ControlValueAccessor and Validator.
Docs: Date Range Picker
<igx-date-range-picker [(ngModel)]="dateRange">
<igx-date-range-start>
<input igxInput igxDateTimeEditor type="text" />
</igx-date-range-start>
<igx-date-range-end>
<input igxInput igxDateTimeEditor type="text" />
</igx-date-range-end>
</igx-date-range-picker>
Docs: Date Time Editor
<igx-time-picker [(ngModel)]="selectedTime" [inputFormat]="'HH:mm'" [is24HourFormat]="true">
</igx-time-picker>
Docs: Calendar Component
<igx-calendar
[(ngModel)]="selectedDate"
[selection]="'single'"
[hideOutsideDays]="true"
[weekStart]="1">
</igx-calendar>
Selection modes: 'single', 'multi', 'range'.
Docs: Checkbox · Radio Button · Switch
<igx-checkbox [(ngModel)]="rememberMe">Remember me</igx-checkbox>
<igx-radio name="plan" value="basic" [(ngModel)]="plan">Basic</igx-radio>
<igx-radio name="plan" value="pro" [(ngModel)]="plan">Pro</igx-radio>
<igx-switch [(ngModel)]="darkMode">Dark mode</igx-switch>
Docs: Slider Component
<igx-slider [type]="SliderType.RANGE" [minValue]="0" [maxValue]="100"
[lowerBound]="20" [upperBound]="80">
</igx-slider>
Docs: Tabs Component
<igx-tabs [(selectedIndex)]="activeTab">
<igx-tab-item>
<igx-tab-header>
<igx-icon igxTabHeaderIcon>info</igx-icon>
<span igxTabHeaderLabel>Info</span>
</igx-tab-header>
<igx-tab-content>Content for Info tab</igx-tab-content>
</igx-tab-item>
<igx-tab-item>
<igx-tab-header>
<span igxTabHeaderLabel>Settings</span>
</igx-tab-header>
<igx-tab-content>Settings content</igx-tab-content>
</igx-tab-item>
</igx-tabs>
Docs: Bottom Navigation
<igx-bottom-nav [(selectedIndex)]="activeNavItem">
<igx-bottom-nav-item>
<igx-bottom-nav-header><igx-icon>home</igx-icon><span>Home</span></igx-bottom-nav-header>
<igx-bottom-nav-content>Home content</igx-bottom-nav-content>
</igx-bottom-nav-item>
</igx-bottom-nav>
Docs: Stepper Component
<igx-stepper [linear]="true" [orientation]="'horizontal'">
<igx-step [completed]="step1Done">
<div igxStepTitle>Account</div>
<div igxStepSubtitle>Create your account</div>
<div igxStepContent>
<!-- form fields -->
</div>
</igx-step>
<igx-step>
<div igxStepTitle>Profile</div>
<div igxStepContent>...</div>
</igx-step>
</igx-stepper>
Docs: Accordion Component
<igx-accordion [singleBranchExpand]="true">
<igx-expansion-panel>
<igx-expansion-panel-header>
<igx-expansion-panel-title>Panel 1</igx-expansion-panel-title>
</igx-expansion-panel-header>
<igx-expansion-panel-body>Content 1</igx-expansion-panel-body>
</igx-expansion-panel>
</igx-accordion>
Docs: Splitter Component
<igx-splitter [type]="SplitterType.Horizontal">
<igx-splitter-pane [size]="'30%'">Left panel</igx-splitter-pane>
<igx-splitter-pane>Right panel</igx-splitter-pane>
</igx-splitter>
Docs: Navigation Drawer
<igx-nav-drawer [isOpen]="drawerOpen" [pinThreshold]="1024">
<ng-template igxDrawer>
<nav>
<span igxDrawerItem [isHeader]="true">Menu</span>
<span igxDrawerItem igxRipple [active]="true" (click)="navigate('home')">
<igx-icon>home</igx-icon><span>Home</span>
</span>
</nav>
</ng-template>
<ng-template igxDrawerMini>
<span igxDrawerItem igxRipple><igx-icon>home</igx-icon></span>
</ng-template>
</igx-nav-drawer>
Docs: List Component
<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 igxListLine>{{ contact.name }}</span>
<span igxListLineSubTitle>{{ contact.email }}</span>
<igx-icon igxListAction (click)="call(contact)">phone</igx-icon>
</igx-list-item>
}
</igx-list>
Docs: Tree Component
<igx-tree [selection]="'BiCascade'">
@for (node of data; track node.id) {
<igx-tree-node [data]="node" [expanded]="node.expanded">
{{ node.label }}
@for (child of node.children; track child.id) {
<igx-tree-node [data]="child">{{ child.label }}</igx-tree-node>
}
</igx-tree-node>
}
</igx-tree>
Docs: Card Component
<igx-card>
<igx-card-header>
<igx-avatar igxCardHeaderThumbnail [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>
AGENT INSTRUCTION: All components in this section rely on Angular animations and the Ignite UI overlay system. Before using them, ensure
provideAnimations()(orprovideAnimationsAsync()) is present inapp.config.ts. If it is missing, add it — otherwise these components will throw runtime errors or silently fail to animate.
Docs: Dialog Component
<igx-dialog #confirmDialog [isModal]="true" [closeOnEscape]="true">
<igx-dialog-title>Confirm Delete</igx-dialog-title>
<p>Are you sure you want to delete this item?</p>
<div igxDialogActions>
<button igxButton="flat" (click)="confirmDialog.close()">Cancel</button>
<button igxButton="raised" (click)="deleteItem(); confirmDialog.close()">Delete</button>
</div>
</igx-dialog>
<button igxButton="raised" (click)="confirmDialog.open()">Delete</button>
Docs: Snackbar Component
<igx-snackbar #snackbar [displayTime]="3000" [autoHide]="true">
Item saved successfully
<button igxButton="flat" igxSnackbarAction (click)="undo()">UNDO</button>
</igx-snackbar>
In TypeScript: this.snackbar.open().
Docs: Toast Component
<igx-toast #toast [displayTime]="2000">Operation complete</igx-toast>
Docs: Banner Component
<igx-banner #banner>
<igx-icon igxBannerIcon>warning</igx-icon>
You are offline. Some features may not be available.
<div igxBannerActions>
<button igxButton="flat" (click)="banner.dismiss()">Dismiss</button>
<button igxButton="flat" (click)="retry()">Retry</button>
</div>
</igx-banner>
Docs: Chip Component
<igx-chips-area>
@for (tag of tags; track tag) {
<igx-chip [removable]="true" (remove)="removeTag(tag)">{{ tag }}</igx-chip>
}
</igx-chips-area>
<igx-avatar [src]="user.photo" shape="circle" size="large">
<igx-badge igxAvatarBadge [type]="'success'" [icon]="'check'"></igx-badge>
</igx-avatar>
Docs: Icon Component
<!-- Material icon (default) -->
<igx-icon>settings</igx-icon>
<!-- SVG icon from custom collection -->
<igx-icon [family]="'custom'" [name]="'my-icon'"></igx-icon>
Register SVG icons in a service:
constructor() {
const iconService = inject(IgxIconService);
iconService.addSvgIconFromText('my-icon', '<svg>...</svg>', 'custom');
}
Docs: Carousel Component
<igx-carousel [interval]="3000" [pause]="true" [loop]="true">
@for (slide of slides; track slide.id) {
<igx-slide>
<img [src]="slide.image" />
</igx-slide>
}
</igx-carousel>
Docs: Paginator Component
<igx-paginator
[totalRecords]="data.length"
[perPage]="10"
[selectOptions]="[5, 10, 25, 50]"
(perPageChange)="onPageSizeChange($event)"
(pageChange)="onPageChange($event)">
</igx-paginator>
Docs: Linear Progress · Circular Progress
<igx-linear-bar [value]="75" [max]="100" [type]="'info'" [striped]="true"></igx-linear-bar>
<igx-circular-bar [value]="65" [max]="100" [animate]="true"></igx-circular-bar>
Docs: Chat Component
<igx-chat [messages]="messages" [isSendDisabled]="isLoading" (sendMessage)="onSend($event)">
</igx-chat>
Docs: Button Component
<button igxButton="flat">Flat</button>
<button igxButton="raised">Raised</button>
<button igxButton="outlined">Outlined</button>
<button igxButton="fab"><igx-icon>add</igx-icon></button>
<button igxIconButton="flat"><igx-icon>edit</igx-icon></button>
Docs: Ripple Directive
<button igxButton="raised" igxRipple>Click me</button>
Docs: Tooltip Directive
<button [igxTooltipTarget]="tooltipRef">Hover me</button>
<div igxTooltip #tooltipRef="tooltip">Tooltip content</div>
Docs: Drag and Drop
<div igxDrag>Drag me</div>
<div igxDrop (dropped)="onDrop($event)">Drop here</div>
All form controls implement ControlValueAccessor and work with both reactive and template-driven forms:
import { FormGroup, FormControl, Validators, ReactiveFormsModule } from '@angular/forms';
import { IgxComboComponent } from 'igniteui-angular/combo';
import { IGX_INPUT_GROUP_DIRECTIVES } from 'igniteui-angular/input-group';
import { IgxDatePickerComponent } from 'igniteui-angular/date-picker';
@Component({
imports: [ReactiveFormsModule, IgxComboComponent, IGX_INPUT_GROUP_DIRECTIVES, IgxDatePickerComponent],
template: `
<form [formGroup]="form">
<igx-input-group>
<label igxLabel>Name</label>
<input igxInput formControlName="name" />
</igx-input-group>
<igx-combo [data]="skills" formControlName="skills"
[valueKey]="'id'" [displayKey]="'name'"
placeholder="Select skills">
</igx-combo>
<igx-date-picker formControlName="startDate"></igx-date-picker>
</form>
`
})
export class MyFormComponent {
form = new FormGroup({
name: new FormControl('', Validators.required),
skills: new FormControl([]),
startDate: new FormControl<Date | null>(null)
});
}
app.config.ts first — add provideAnimations() from @angular/platform-browser/animations before using any overlay or animated component (Dialog, Combo, Select, Date Picker, Snackbar, Toast, Banner, Navigation Drawer). This is the most common source of runtime errors in new projects.igniteui-angular barrel for tree-shakingigxRipple on interactive elements for Material-style feedback