Angular Elements — это технология, позволяющая упаковывать Angular-компоненты в виде переиспользуемых пользовательских элементов (Custom Elements), которые можно использовать вне контекста Angular-приложения. Это часть стандарта Web Components.
Интеграция с любыми технологиями
Созданные элементы работают в React, Vue.js, обычном HTML и даже статических страницах.
Автономность
Компоненты содержат все необходимые зависимости внутри себя.
Стандартизация
Используют Web Components API, поддерживаемый современными браузерами.
npm install @angular/elements
import { Component, Input, Output, EventEmitter } from '@angular/core';
@Component({
selector: 'app-greet',
template: `<h1>Hello, {{name}}!</h1>
<button (click)="handleClick()">Click me</button>`
})
export class GreetComponent {
@Input() name: string = 'World';
@Output() clicked = new EventEmitter<void>();
handleClick() {
this.clicked.emit();
}
}
import { Injector, createCustomElement } from '@angular/elements';
@NgModule({
declarations: [GreetComponent],
entryComponents: [GreetComponent]
})
export class AppModule {
constructor(private injector: Injector) {
const element = createCustomElement(GreetComponent, { injector });
customElements.define('app-greet', element);
}
}
Пример использования в React:
function ReactComponent() {
return (
<div>
<app-greet name="React"></app-greet>
</div>
);
}
Разные команды могут разрабатывать части приложения независимо, используя разные технологии.
Создание компонентов для WordPress, Drupal и других систем:
<!-- Вставка в WordPress -->
<div class="widget">
<app-weather-widget location="New York"></app-weather-widget>
</div>
Создание компонентов, которые могут подключаться к различным платформам.
Постепенный перевод legacy-приложения на Angular.
<app-greet name="John"></app-greet>
const element = document.querySelector('app-greet');
element.addEventListener('clicked', () => {
console.log('Button clicked!');
});
Размер бандла
Angular Elements добавляют ```30KB к размеру бандла. Для нескольких элементов лучше делать shared-бандл.
Polyfills
Для старых браузеров нужны полифиллы:
<script src="https://unpkg.com/@webcomponents/webcomponentsjs@2.4.3/webcomponents-bundle.js"></script>
Change Detection
Используйте OnPush
стратегию для оптимизации производительности.
Жизненный цикл
Элементы должны обрабатывать стандартные Web Component колбэки:
connectedCallback
disconnectedCallback
class LazyElement extends HTMLElement {
async connectedCallback() {
const { MyElementModule } = await import('./my-element.module');
const element = createCustomElement(MyElementComponent, {
injector: await MyElementModule.injector
});
customElements.define('my-lazy-element', element);
this.innerHTML = `<my-lazy-element></my-lazy-element>`;
}
}
customElements.define('my-lazy-wrapper', LazyElement);
Angular Elements — это мощный инструмент для создания переиспользуемых компонентов, которые можно интегрировать в любые веб-приложения. Основные сценарии включают микрофронтенды, виджеты для CMS, плагины и постепенную миграцию legacy-систем. При правильном использовании они открывают возможности для кросс-фреймворковой разработки компонентов.