Angular CDK (Component Dev Kit) — это библиотека инструментов для разработки Angular-компонентов, предоставляющая набор поведенческих примитивов и готовых решений без привязки к конкретному UI-дизайну.
Создание всплывающих элементов (модалки, попапы, меню):
import { OverlayModule } from '@angular/cdk/overlay';
@NgModule({
imports: [OverlayModule]
})
export class AppModule {}
Пример использования:
constructor(private overlay: Overlay) {}
openPopup() {
const overlayRef = this.overlay.create({
positionStrategy: this.overlay.position()
.global()
.centerHorizontally()
.centerVertically(),
hasBackdrop: true
});
overlayRef.attach(new ComponentPortal(MyPopupComponent));
}
Динамическое отображение контента в DOM:
import { ComponentPortal } from '@angular/cdk/portal';
// Создание портала
const portal = new ComponentPortal(MyDynamicComponent);
// Прикрепление к точке в DOM
portalOutlet.attach(portal);
Реализация перетаскивания элементов:
import { DragDropModule } from '@angular/cdk/drag-drop';
@NgModule({
imports: [DragDropModule]
})
export class AppModule {}
Пример использования:
<div cdkDropList (cdkDropListDropped)="drop($event)">
<div *ngFor="let item of items" cdkDrag>{{item}}</div>
</div>
drop(event: CdkDragDrop<string[]>) {
moveItemInArray(this.items, event.previousIndex, event.currentIndex);
}
Оптимизация рендеринга больших списков:
import { ScrollingModule } from '@angular/cdk/scrolling';
@NgModule({
imports: [ScrollingModule]
})
export class AppModule {}
Пример:
<cdk-virtual-scroll-viewport itemSize="50" class="viewport">
<div *cdkVirtualFor="let item of items">{{item}}</div>
</cdk-virtual-scroll-viewport>
Работа с буфером обмена:
import { ClipboardModule } from '@angular/cdk/clipboard';
@NgModule({
imports: [ClipboardModule]
})
export class AppModule {}
Пример:
<button [cdkCopyToClipboard]="textToCopy">Копировать</button>
Инструменты для доступности:
import { A11yModule } from '@angular/cdk/a11y';
@NgModule({
imports: [A11yModule]
})
export class AppModule {}
Примеры:
cdkTrapFocus
- ловушка фокуса для модалокcdkMonitorSubtreeFocus
- отслеживание фокусаРеактивные инструменты для работы с макетом:
import { LayoutModule } from '@angular/cdk/layout';
@NgModule({
imports: [LayoutModule]
})
export class AppModule {}
Пример:
import { BreakpointObserver, Breakpoints } from '@angular/cdk/layout';
constructor(private breakpointObserver: BreakpointObserver) {
breakpointObserver.observe([
Breakpoints.Handset
]).subscribe(result => {
this.isMobile = result.matches;
});
}
Улучшения для текстовых полей:
import { TextFieldModule } from '@angular/cdk/text-field';
@NgModule({
imports: [TextFieldModule]
})
export class AppModule {}
Пример:
<textarea cdkTextareaAutosize></textarea>
import { CdkStepperModule } from '@angular/cdk/stepper';
@NgModule({
imports: [CdkStepperModule]
})
export class AppModule {}
Пример:
<div cdkStepper>
<div cdkStep *ngFor="let step of steps">
{{step}}
</div>
</div>
import { CdkTableModule } from '@angular/cdk/table';
@NgModule({
imports: [CdkTableModule]
})
export class AppModule {}
Пример:
<table cdk-table [dataSource]="dataSource">
<ng-container cdkColumnDef="name">
<th cdk-header-cell *cdkHeaderCellDef>Name</th>
<td cdk-cell *cdkCellDef="let row">{{row.name}}</td>
</ng-container>
</table>
Angular CDK предоставляет мощный набор инструментов для создания кастомных, доступных и производительных компонентов. Он дает разработчикам строительные блоки для реализации сложных UI-паттернов без привязки к конкретному дизайну, что делает его незаменимым инструментом для профессиональной Angular-разработки.