Angular Elements предоставляет возможность создавать веб-компоненты на базе Angular-компонентов, упаковывая их в стандарт Custom Elements API. Это позволяет использовать Angular-логику вне Angular-приложений.
Angular Element — это Angular-компонент, преобразованный в пользовательский HTML-элемент, совместимый с браузерными стандартами.
Пример использования после сборки:
<user-profile></user-profile>
Компонент работает без знания Angular со стороны окружения.
Angular Elements опирается на:
Angular-компонент становится «обёрткой», внутри которой продолжает работать Angular runtime.
Модуль:
import { createCustomElement } from '@angular/elements';
Регистрация элемента:
const element = createCustomElement(AppComponent, { injector });
customElements.define('app-root-element', element);
После регистрации элемент доступен глобально.
Angular Element синхронизирует жизненный цикл Angular с Custom Elements:
connectedCallback → ngOnInitdisconnectedCallback → ngOnDestroyngOnChangesЭто позволяет использовать стандартные Angular-хуки без изменений.
@Input() автоматически маппится на HTML-атрибут:
@Input() title!: string;
<my-card title="Новости"></my-card>
@Output() преобразуется в DOM-событие:
@Output() closed = new EventEmitter<void>();
element.addEventListener('closed', () => { ... });
Это обеспечивает совместимость с любыми фреймворками.
Angular Elements поддерживает различные режимы инкапсуляции:
ViewEncapsulation.EmulatedViewEncapsulation.ShadowDomViewEncapsulation.NoneПри использовании ShadowDom стили полностью
изолированы:
@Component({
encapsulation: ViewEncapsulation.ShadowDom
})
Это критично при встраивании компонента в сторонние сайты.
Angular Elements включает часть Angular runtime. Для уменьшения веса применяются:
ngZone: 'noop')Пример bootstrap без AppModule:
bootstrapApplication(AppComponent, {
providers: [...]
});
Angular Elements применяются:
Компонент может быть использован в React, Vue, Svelte или чистом HTML без адаптеров.
Особенности, которые необходимо учитывать:
Angular Elements целесообразны при повторном использовании сложной логики, а не для примитивных UI-элементов.
| Критерий | Angular Elements | Native Web Components |
|---|---|---|
| Логика | Angular | JavaScript |
| DI | Да | Нет |
| Размер | Большой | Минимальный |
| Шаблоны | Angular HTML | HTML |
| Change Detection | Автоматический | Ручной |
Angular Elements занимают нишу между фреймворками и стандартами платформы, позволяя использовать Angular как фабрику компонентов для любой среды.