angular-material-v20
8
总安装量
8
周安装量
#34583
全站排名
安装命令
npx skills add https://github.com/7spade/black-tortoise --skill angular-material-v20
Agent 安装分布
antigravity
7
opencode
4
claude-code
4
gemini-cli
4
cursor
4
Skill 文档
Angular Material v20 Skill
Rules
Installation
- Use
ng add @angular/materialfor automatic setup - Must install
@angular/material@~20.0.0and@angular/cdk@~20.0.0together
Component Imports
- Import specific component modules (e.g.,
MatDialogModule,MatFormFieldModule) - Use standalone components with explicit imports array
- NEVER import entire Material library
Theming
- Use
@use '@angular/material' as mat;syntax - Include
mat.core()before theme definitions - Define theme with
mat.define-light-theme()ormat.define-dark-theme() - Include
mat.all-component-themes($theme)to apply theme
Form Fields
- Wrap
matInputelements in<mat-form-field> - Use
appearanceattribute:outline,fill, orstandard - Include
<mat-label>for accessibility - Show errors with
<mat-error>when field is invalid and touched
Dialog Usage
- Inject
MatDialogservice - Use
dialog.open(Component, config)to open dialogs - Configure dialog with
width,data, and other options - Access dialog data via
MAT_DIALOG_DATAinjection token
Accessibility
- Follow ARIA guidelines for all components
- Include aria-labels where text content is not visible
- Ensure keyboard navigation works for all interactive elements
Change Detection
- Use
OnPushchange detection strategy - Leverage signals for reactive state management
Performance
- Lazy load Material modules when possible
- Import only required component modules
- Use virtual scrolling for large lists with
cdk-virtual-scroll-viewport
Context
Summary
Angular Material v20 is the official Material Design component library for Angular 20+ applications, providing pre-built UI components with theming support and accessibility features.
When to Use This Skill
Activate this skill when you need to:
- Implement Material Design components in Angular applications
- Set up or customize Material theming
- Work with form controls (inputs, selects, checkboxes, datepickers)
- Create navigation components (toolbar, sidenav, menu, tabs)
- Build layouts with cards, expansion panels, steppers
- Display data in tables with sorting and pagination
- Show dialogs, snackbars, tooltips, or bottom sheets
- Ensure WCAG accessibility compliance
- Optimize Material component performance
Core Components
Form Controls
- MatInput – Text input fields
- MatSelect – Dropdown selection
- MatCheckbox – Checkbox inputs
- MatRadioButton – Radio button groups
- MatSlideToggle – Toggle switches
- MatSlider – Slider inputs
- MatDatepicker – Date selection
Navigation
- MatToolbar – Top navigation bar
- MatSidenav – Side navigation drawer
- MatMenu – Dropdown menus
- MatTabs – Tabbed navigation
Layout
- MatCard – Card containers
- MatDivider – Visual separators
- MatExpansionPanel – Collapsible panels
- MatGridList – Grid layouts
- MatList – List displays
- MatStepper – Step-by-step workflows
Buttons & Indicators
- MatButton – Button variants
- MatButtonToggle – Toggle button groups
- MatBadge – Notification badges
- MatChip – Chip elements
- MatIcon – Icon display
- MatProgressBar – Linear progress
- MatProgressSpinner – Circular progress
Popups & Modals
- MatDialog – Modal dialogs
- MatSnackBar – Toast notifications
- MatTooltip – Hover tooltips
- MatBottomSheet – Bottom sheet modals
Data Tables
- MatTable – Data table display
- MatSort – Column sorting
- MatPaginator – Table pagination
Theming Example
// styles.scss
@use '@angular/material' as mat;
@include mat.core();
$my-primary: mat.define-palette(mat.$indigo-palette);
$my-accent: mat.define-palette(mat.$pink-palette);
$my-warn: mat.define-palette(mat.$red-palette);
$my-theme: mat.define-light-theme((
color: (
primary: $my-primary,
accent: $my-accent,
warn: $my-warn,
)
));
@include mat.all-component-themes($my-theme);
Dialog Example
import { Component, inject } from '@angular/core';
import { MatDialog, MatDialogModule } from '@angular/material/dialog';
@Component({
selector: 'app-example',
standalone: true,
imports: [MatDialogModule],
template: `
<button mat-raised-button (click)="openDialog()">
Open Dialog
</button>
`
})
export class ExampleComponent {
dialog = inject(MatDialog);
openDialog() {
this.dialog.open(MyDialogComponent, {
width: '400px',
data: { name: 'Example' }
});
}
}
Form Field Example
import { Component } from '@angular/core';
import { MatFormFieldModule } from '@angular/material/form-field';
import { MatInputModule } from '@angular/material/input';
import { ReactiveFormsModule } from '@angular/forms';
@Component({
selector: 'app-form',
standalone: true,
imports: [MatFormFieldModule, MatInputModule, ReactiveFormsModule],
template: `
<mat-form-field appearance="outline">
<mat-label>Email</mat-label>
<input matInput [formControl]="email" />
<mat-error *ngIf="email.hasError('required')">
Email is required
</mat-error>
</mat-form-field>
`
})
export class FormComponent {
email = new FormControl('', Validators.required);
}
Best Practices
- Import modules – Import specific component modules for better tree-shaking
- Use theming – Leverage Material’s theming system for consistent styling
- Accessibility – Follow ARIA guidelines and ensure keyboard navigation
- OnPush – Use OnPush change detection with signals for better performance
- Lazy loading – Lazy load Material modules where possible to reduce initial bundle size