What is @angular/elements?
@angular/elements allows Angular components to be used as custom elements (web components). This enables the integration of Angular components into non-Angular applications and enhances reusability across different frameworks and libraries.
What are @angular/elements's main functionalities?
Creating a Custom Element
This code demonstrates how to create a custom element from an Angular component. The `createCustomElement` function is used to convert `MyComponent` into a custom element named 'my-element'.
import { Injector, NgModule } from '@angular/core';
import { createCustomElement } from '@angular/elements';
import { BrowserModule } from '@angular/platform-browser';
import { MyComponent } from './my-component.component';
@NgModule({
declarations: [MyComponent],
imports: [BrowserModule],
entryComponents: [MyComponent]
})
export class AppModule {
constructor(private injector: Injector) {
const myElement = createCustomElement(MyComponent, { injector });
customElements.define('my-element', myElement);
}
ngDoBootstrap() {}
}
Using the Custom Element in HTML
Once the Angular component is converted into a custom element, it can be used in any HTML file just like a standard HTML element. This example shows how to include and use the custom element 'my-element' in an HTML file.
<!DOCTYPE html>
<html>
<head>
<title>Angular Element</title>
<script src="path/to/your/angular-element.js"></script>
</head>
<body>
<my-element></my-element>
</body>
</html>
Other packages similar to @angular/elements
stencil
Stencil is a compiler that generates Web Components (custom elements) and builds high-performance web apps. It is framework-agnostic and can be used to create reusable components that work with any major framework or no framework at all. Compared to @angular/elements, Stencil is more focused on performance and offers additional features like lazy loading and pre-rendering.
lit
Lit is a simple library for building fast, lightweight web components. It provides a minimal API to define custom elements and manage their lifecycle. Lit is known for its small size and ease of use, making it a good alternative to @angular/elements for projects that require lightweight and fast custom elements.
vue-custom-element
vue-custom-element is a Vue plugin that enables the creation of custom elements from Vue components. It allows Vue components to be used as web components in non-Vue applications. This package is similar to @angular/elements but is tailored for Vue.js, providing a seamless way to integrate Vue components as custom elements.
18.1.0 (2024-07-10)
common
| Commit | Type | Description |
| -- | -- | -- |
| f25653e231 | fix | typo in NgOptimizedImage warning (#56756) |
| 9b35726e42 | fix | typo in warning for NgOptimizedDirective (#56817) |
compiler
| Commit | Type | Description |
| -- | -- | -- |
| fd6cd0422d | feat | Add extended diagnostic to warn when there are uncalled functions in event bindings (#56295) |
| 341a116d61 | fix | allow more characters in let declaration name (#56764) |
| 2a1291e942 | fix | give precedence to local let declarations over parent ones (#56752) |
compiler-cli
| Commit | Type | Description |
| -- | -- | -- |
| 66e582551e | fix | avoid duplicate diagnostics for let declarations read before definition (#56843) |
| 4d18c5bfd5 | fix | flag all conflicts between let declarations and local symbols (#56752) |
| 9e21582456 | fix | Show template syntax errors in local compilation modified (#55855) |
| 5996502921 | fix | type check let declarations nested inside nodes (#56752) |
| cdebf751e4 | fix | used before declared diagnostic not firing for control flow blocks (#56843) |
core
| Commit | Type | Description |
| -- | -- | -- |
| ea3c802056 | feat | Add a schematic to migrate afterRender phase flag (#55648) |
| 5df3e78c99 | feat | add equality function to rxjs-interop toSignal
(#56447) |
| 0a48d584f2 | feat | add support for let syntax (#56715) |
| 352e0782ec | feat | expose signal input metadata in ComponentMirror
(#56402) |
| a655e46447 | feat | Redesign the afterRender
& afterNextRender
phases API (#55648) |
| e5a6f91722 | feat | support TypeScript 5.5 (#56096) |
| 38effcc63e | fix | Add back phase flag option as a deprecated API (#55648) |
| 86bcfd3e49 | fix | improve docs on afterRender hooks (#56522) |
| b2445a0953 | fix | link errors to ADEV (#55554) (#56038) |
| 03a2acd2a3 | fix | properly remove imports in the afterRender phase migration (#56524) |
| 4d87b9e899 | fix | rename the equality function option in toSignal (#56769) (#56922) |
| 8bd4c074af | fix | toSignal equal option should be passed to inner computed (#56903) |
forms
| Commit | Type | Description |
| -- | -- | -- |
| 00bde8b1c2 | fix | Make NgControlStatus
host bindings OnPush
compatible (#55720) |
http
| Commit | Type | Description |
| -- | -- | -- |
| cc21989132 | fix | Make Content-Type
header case insensitive (#56541) |
language-service
| Commit | Type | Description |
| -- | -- | -- |
| b400e2e4d4 | feat | autocompletion for the component not imported (#55595) |
| 67b2c336bc | fix | import the default exported component correctly (#56432) |
router
| Commit | Type | Description |
| -- | -- | -- |
| a13f5da773 | feat | Allow UrlTree
as an input to routerLink
(#56265) |
| 1d3a7529b4 | feat | Set a different browser URL from the one for route matching (#53318) |
<!-- CHANGELOG SPLIT MARKER -->
<a name="18.0.7"></a>