关于 angular-standalone
用于使用独立组件构建 Angular 应用的开发指南,涵盖组件依赖、应用启动、函数式提供器、路由、延迟加载及从 NgModule 迁移。
主要功能
- 01创建独立组件
- 02在 imports 数组中声明依赖
- 03使用 bootstrapApplication 启动应用
- 04配置函数式提供器和路由
- 05延迟加载独立组件
- 06从 NgModule 迁移
适用场景
- 01构建不依赖 NgModule 组件的 Angular 应用
- 02为独立组件应用配置路由
- 03按需加载功能组件
- 04使用迁移工具转换现有组件
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ oguzhan18/ angular-ecosystem-skills --skill angular-standalone安装后在 Claude Code 中输入/angular-standalone确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/discussions/_INDEX.mdreferences/docs/_INDEX.mdreferences/issues/_INDEX.mdreferences/releases/_INDEX.md详细介绍
Angular 独立组件
版本: Angular 21(2025) 标签: 独立、组件、导入、启动
API 变更
本节介绍近期特定版本的 API 变更。
-
新增:默认采用独立模式 — 自 Angular 17 起,新组件默认采用独立模式
-
新增:用于独立模式的 provideRouter — 使用函数式提供程序替代 RouterModule
-
新增:ng generate @angular/core:standalone — 迁移原理图
-
已弃用:NgModule — 建议迁移到独立组件
最佳实践
- 创建独立组件
@Component({
standalone: true,
imports: [CommonModule, MatButtonModule],
selector: 'app-my',
template: `<button>Click</button>`
})
export class MyComponent {}
- 使用 imports 数组添加依赖
@Component({
standalone: true,
imports: [
CommonModule,
RouterModule,
MatCardModule,
MyChildComponent
],
template: `
<mat-card>
<app-my-child></app-my-child>
</mat-card>
`
})
export class ParentComponent {}
- 启动独立组件
// main.ts
import { bootstrapApplication } from '@angular/platform-browser';
import { AppComponent } from './app/app.component';
import { appConfig } from './app/app.config';
bootstrapApplication(AppComponent, appConfig)
.catch(err => console.error(err));
- 使用函数式提供程序
export const appConfig: ApplicationConfig = {
providers: [
provideRouter(routes),
provideHttpClient(),
provideAnimations()
]
};
- 使用 provideZoneChangeDetection
export const appConfig: ApplicationConfig = {
providers: [
provideZoneChangeDetection({ eventCoalescing: true })
]
};
- 从 NgModule 迁移
# Full migration
ng generate @angular/core:standalone
# Specific component
ng generate @angular/core:standalone --path=path/to/component
- 在独立模式下使用 Router Outlet
@Component({
standalone: true,
imports: [RouterOutlet],
template: `<router-outlet></router-outlet>`
})
export class AppComponent {}
- 延迟加载独立组件
const routes: Routes = [
{
path: 'admin',
loadComponent: () => import('./admin/admin.component').then(m => m.AdminComponent)
}
];
- 使用 forwardRef 处理循环导入
@Component({
standalone: true,
imports: [forwardRef(() => OtherComponent)]
})
export class MyComponent {}
- 导出独立组件
@Component({
standalone: true,
exports: [MyComponent],
imports: [MyComponent]
})
export class FeatureComponent {}
评论
支持 Markdown