Skip to content

refactor(core): implement ɵɵforeignComponent instruction#68787

Draft
leonsenft wants to merge 3 commits into
angular:mainfrom
leonsenft:foreign-component-instruction-impl
Draft

refactor(core): implement ɵɵforeignComponent instruction#68787
leonsenft wants to merge 3 commits into
angular:mainfrom
leonsenft:foreign-component-instruction-impl

Conversation

@leonsenft
Copy link
Copy Markdown
Contributor

This is based on #68786

Implement the ɵɵforeignComponent instruction to render foreign components (components from other frameworks) inside Angular templates. The instruction creates a host LContainer, instantiates a foreign view, executes the foreign component's RENDER function, inserts the returned native DOM nodes, and registers the disposal hook.

Add unit tests to verify element rendering, property passing, and disposal on destruction.

leonsenft added 3 commits May 18, 2026 14:40
…s in templates

We extract the identifier name from the `foreignImports` expression in
`ComponentDecoratorHandler` and use a `SelectorlessMatcher` to match element
tags against these names. If an element matches both a regular Angular
directive and a foreign component, a conflict error is thrown.

In addition, we implement strict template semantic validation for these matched
foreign components within `TemplateSemanticsChecker`. Elements matched as
foreign components only support static attributes and property bindings. Any
event bindings, template references, or non-property input bindings (e.g.
class, style, or attribute bindings) trigger a semantic error diagnostic.

Finally, we skip standard DOM schema checks for foreign components to prevent spurious
validation errors since foreign components are not defined in standard HTML schemas.
When a template element matches an imported foreign component, the compiler
omits standard element instructions (`ɵɵelementStart`/`ɵɵelement`) and instead
generates a single `ɵɵforeignComponent` call. The call passes the exact foreign
import wrapper expression defined in `@Component.foreignImports` along with an
aggregated object literal containing all static attributes and property
bindings.

The instruction itself is currently a no-op.
Implement the `ɵɵforeignComponent` instruction to render foreign components
(components from other frameworks) inside Angular templates.  The instruction
creates a host LContainer, instantiates a foreign view, executes the foreign
component's RENDER function, inserts the returned native DOM nodes, and
registers the disposal hook.

Add unit tests to verify element rendering, property passing, and disposal on
destruction.
@angular-robot angular-robot Bot added area: compiler Issues related to `ngc`, Angular's template compiler area: core Issues related to the framework runtime labels May 18, 2026
@ngbot ngbot Bot added this to the Backlog milestone May 18, 2026
@leonsenft leonsenft added target: minor This PR is targeted for the next minor release and removed area: compiler Issues related to `ngc`, Angular's template compiler labels May 18, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area: core Issues related to the framework runtime target: minor This PR is targeted for the next minor release

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant