关于 angular-elements
介绍如何使用 @angular/elements 将 Angular 组件转换为自定义元素,涵盖输入输出映射、独立元素、打包及微前端应用。
主要功能
- 01从 Angular 组件创建自定义元素
- 02映射组件输入和输出
- 03配置自定义元素行为
- 04构建独立元素
- 05将元素打包以供分发
- 06为微前端注册元素
适用场景
- 01将 Angular 组件作为 Web 组件公开
- 02连接 Web 组件属性与 Angular 事件
- 03为微前端构建可复用元素
- 04配置单包元素构建
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ oguzhan18/ angular-ecosystem-skills --skill angular-elements安装后在 Claude Code 中输入/angular-elements确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/discussions/_INDEX.mdreferences/docs/_INDEX.mdreferences/issues/_INDEX.mdreferences/releases/_INDEX.md详细介绍
@angular/elements
版本: Angular 21(2025) 标签: Web Components、自定义元素、微前端
参考: Elements 指南 • API
API 变更
本节介绍近期特定版本的 API 变更。
-
新增:createCustomElement API — 将 Angular 组件打包为自定义元素
-
新增:NgElementConfig — 配置自定义元素的行为
-
新增:输入/输出映射 — 将 Angular 输入/输出映射到 Web 组件属性
-
新增:独立元素 — 无需 NgModule 即可构建独立元素
最佳实践
- 安装 @angular/elements
npm install @angular/elements
- 从组件创建自定义元素
import { createCustomElement } from '@angular/elements';
@Injectable()
export class ElementRegistrar {
constructor(private injector: Injector) {}
register() {
const element = createCustomElement(MyComponent, { injector: this.injector });
customElements.define('my-element', element);
}
}
- 在 main.ts 中使用
import { createApplication } from '@angular/platform-browser';
import { createCustomElement } from '@angular/elements';
bootstrapApplication(AppComponent).then(appRef => {
const element = createCustomElement(MyComponent, { injector: appRef.injector });
customElements.define('my-component', element);
});
- 映射输入和输出
const element = createCustomElement(MyComponent, {
injector: this.injector,
events: ['myEvent'],
attributes: ['myInput']
});
- 使用 CUSTOM_ELEMENTS_SCHEMA
// To use custom elements in Angular
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
@NgModule({
schemas: [CUSTOM_ELEMENTS_SCHEMA]
})
export class AppModule {}
- 构建为 Web 组件
// angular.json
{
"build": {
"options": {
"outputPath": "dist",
"singleBundle": true
}
}
}
- 使用 input() 和 output() 处理 Web 组件数据
@Component({
selector: 'my-element',
standalone: true
})
export class MyElementComponent {
data = input<string>('');
output = output<string>();
onClick() {
this.output.emit('event-data');
}
}
- 处理内容投影
@Component({
selector: 'my-element',
template: `
<div class="header">
<ng-content select="[header]"></ng-content>
</div>
<div class="body">
<ng-content></ng-content>
</div>
`
})
export class MyElementComponent {}
- 用于微前端
// Register multiple elements
const elements = [ButtonComponent, CardComponent, InputComponent];
elements.forEach(comp => {
const el = createCustomElement(comp, { injector });
customElements.define(comp.selector, el);
});
评论
支持 Markdown