Deliver web apps with confidence 🚀
Find a file
Alex Rickabaugh a67e00741c refactor(forms): move control logic into FormField directive
Refactors the `ɵɵcontrolCreate` and `ɵɵcontrol` instructions to delegate control logic to the forms package via new `ɵngControlCreate` and `ɵngControlUpdate` lifecycle hooks. Previously, the logic for binding form state to native elements and custom controls was hardcoded within `@angular/core`.

**Compiler Changes:**
- Introduces a new compilation phase `specializeControlProperties` (in `control_directives.ts`).
- This phase detects properties named `formField` and specializes them into `ControlCreate` and `Control` IR opcodes.
- These opcodes emit `ɵɵcontrolCreate` and `ɵɵcontrol` instructions, respectively.

**Runtime Changes:**
- `ɵɵcontrolCreate` acts as the creation phase. It locates the control directive and invokes its `ɵngControlCreate` method.
- `ɵɵcontrol` acts as the update phase, and invokes the control directive's `ɵngControlUpdate` method (if present).
- Introduces a `passThroughInput` configuration in `ControlFeature`. This specifies the input name (e.g., `formField`) that triggers the control. If the runtime detects that this input is bound to multiple targets (e.g., the `FormField` directive *and* the host component), the control is flagged as "pass-through". In this state, `ɵngControlCreate` returns a no-op update function, deferring responsibility to the other consumer (e.g., the component managing the field itself).

**Forms Changes:**
- `FormField` directive implements `ɵngControlCreate` and `ɵngControlUpdate`.
- Inside this hook, `FormField` determines the type of control it is attached to (Native, CVA, or Custom Signal Control) and delegates to the appropriate handler (`nativeControlCreate`, `cvaControlCreate`, or `customControlCreate`).
- Consolidates all form binding logic within `@angular/forms/signals`, enabling support for new `FormValueControl` and `FormCheckboxControl` interfaces.
- Reorganizes the codebase by moving `FormField` from `api/` to `directive/` and splitting the binding logic into semantic pieces:
    - `control_native.ts`, `control_cva.ts`, and `control_custom.ts` contain the specific handlers for each control type.
    - `native.ts` and `select.ts` provide helpers for native element discovery and select-specific synchronization.
    - `bindings.ts` manages the tracking and application of property/attribute bindings.
2026-01-29 13:17:40 -08:00
.devcontainer build: update dev container configuration 2026-01-12 13:39:29 -08:00
.gemini ci: add gemini code assist config (#62560) 2025-07-09 12:42:45 -07:00
.github build: update cypress-io/github-action action to v7 2026-01-28 18:17:25 +00:00
.husky build: use pnpm as the package manager instead of yarn (#62924) 2025-07-31 22:06:27 +00:00
.ng-dev build: begin requring usage of release mode for releases 2026-01-12 13:36:19 -08:00
.vscode build: use @angular/language-service from source (#64306) 2025-10-09 10:00:31 -07:00
adev docs(docs-infra): wrap getTextOfJSDocComment 2026-01-29 13:16:00 -08:00
contributing-docs build: update dev container configuration 2026-01-12 13:39:29 -08:00
dev-app build: update cross-repo angular dependencies 2026-01-08 13:26:26 -08:00
devtools refactor(devtools): snap to signal graph nodes selected from the properties panel 2026-01-28 18:33:37 +00:00
goldens refactor(forms): move control logic into FormField directive 2026-01-29 13:17:40 -08:00
integration build: update all non-major dependencies 2026-01-29 12:22:40 -08:00
modules build: update all non-major dependencies 2026-01-22 22:10:16 +00:00
packages refactor(forms): move control logic into FormField directive 2026-01-29 13:17:40 -08:00
scripts build: use Node.js built-in TypeScript support for dev-infra scripts 2026-01-02 08:15:40 +01:00
third_party build: drop usage of pkg_web (#62990) 2025-08-05 10:08:47 +02:00
tools build: initial test of TypeScript 6 2026-01-15 13:41:01 -08:00
vscode-ng-language-service fix(language-service): Detect local project version on creation 2026-01-26 23:51:31 +00:00
.bazelrc build: update to bazel version 8.4.2 2025-12-08 10:21:59 -08:00
.bazelversion build: update dependency bazel to v8.5.1 2026-01-14 07:57:34 -08:00
.clang-format feat(tooling): Add a .clang-format for automated JavaScript formatting. 2015-04-02 08:44:34 -07:00
.editorconfig build: use https link to editorconfig.org in .editorconfig (#27664) 2018-12-18 09:30:09 -08:00
.git-blame-ignore-revs build: add commits to the ignore revs files. 2025-12-16 16:32:49 -08:00
.gitattributes build: cleanup .gitattributes file and remove outdated CRLF attribute (#46513) 2022-06-28 13:38:27 -07:00
.gitignore build: update dev container configuration 2026-01-12 13:39:29 -08:00
.gitmessage docs: move commit message guidelies to a separate file (#58786) 2025-03-04 19:35:54 +00:00
.mailmap build: add a Git .mailmap with my new name (#19550) 2017-10-09 14:35:30 -07:00
.npmrc build: ensure optimization rule can use compiler-cli from HEAD (#61810) 2025-06-02 09:52:57 -04:00
.nvmrc build: update dependency node to v22.22.0 2026-01-14 07:57:59 -08:00
.pnpmfile.cjs build: improve dependency management for local packages 2025-11-12 09:34:27 -08:00
.prettierignore feat(compiler): Add support for multiple swich cases matching 2026-01-07 09:23:50 -05:00
.prettierrc ci: enable embeddedLanguageFormatting for prettier 2025-12-15 09:54:48 -08:00
.pullapprove.yml ci: add Charles & Doug as optional adev reviewers 2026-01-02 08:14:37 +01:00
browser-providers.conf.d.ts build: share Saucelabs browsers between karma test targets using background Saucelabs daemon and custom karma launcher (#49200) 2023-05-15 09:21:46 -07:00
browser-providers.conf.js refactor: update license text to point to angular.dev (#57901) 2024-09-24 15:33:00 +02:00
BUILD.bazel build: use snapshot builds for dependencies in @angular/language-server (#64334) 2025-10-10 06:48:51 -07:00
CHANGELOG.md release: cut the v21.2.0-next.1 release 2026-01-28 20:49:59 +00:00
CHANGELOG_ARCHIVE.md build: format md files 2025-11-06 10:03:05 -08:00
CODE_OF_CONDUCT.md build: format md files 2025-11-06 10:03:05 -08:00
context7.json docs: add context7.json config (#63000) 2025-08-05 18:15:38 +02:00
CONTRIBUTING.md docs: Update contributing guidelines 2025-12-08 09:06:25 -08:00
gulpfile.js refactor: update license text to point to angular.dev (#57901) 2024-09-24 15:33:00 +02:00
karma-js.conf.js build: update to bazel 7.6.0 (#63096) 2025-08-14 13:01:30 +02:00
LICENSE docs: update copyright year 2026-01-07 12:28:34 -05:00
MODULE.bazel build: update bazel dependencies 2026-01-29 12:22:00 -08:00
MODULE.bazel.lock build: update bazel dependencies 2026-01-29 12:22:00 -08:00
package.json build: update all non-major dependencies 2026-01-29 12:22:40 -08:00
packages.bzl docs(docs-infra): remove unused examples 2026-01-26 23:19:35 +00:00
pnpm-lock.yaml build: update all non-major dependencies 2026-01-29 12:22:40 -08:00
pnpm-workspace.yaml refactor(vscode-extension): Remove pre-19 integration project 2026-01-05 17:01:49 -05:00
README.md docs: fix lazy loading documentation reference 2025-12-08 08:47:40 -08:00
renovate.json ci: update Renovate configuration to replace Bazel module dependency command 2026-01-13 08:28:43 -08:00
REPO.bazel build: migrate Bazel ignore rules from .bazelignore to REPO.bazel 2025-12-17 10:14:00 -08:00
SECURITY.md docs: update security guide link to adev (#56469) 2024-06-17 08:54:08 -07:00
tsconfig-tslint.json build: update tslint configuration (#61146) 2025-05-06 13:35:24 -07:00
tslint.json build: add a noDuplicateEnumValue rule (#63483) 2025-09-10 22:16:10 +00:00

Angular - The modern web developer's platform

angular-logo
Angular is a development platform for building mobile and desktop web applications
using TypeScript/JavaScript and other languages.

angular.dev

Contributing Guidelines · Submit an Issue · Blog

Angular on npm


Documentation

Get started with Angular, learn the fundamentals and explore advanced topics on our documentation website.

Advanced

Local Development

To contribute to the Angular Docs, check out the Angular.dev README

Development Setup

Prerequisites

Setting Up a Project

Install the Angular CLI globally:

npm install -g @angular/cli

Create workspace:

ng new [PROJECT NAME]

Run the application:

cd [PROJECT NAME]
ng serve

Angular is cross-platform, fast, scalable, has incredible tooling, and is loved by millions.

Quickstart

Get started in 5 minutes.

Ecosystem

angular ecosystem logos

Changelog

Learn about the latest improvements.

Upgrading

Check out our upgrade guide to find out the best way to upgrade your project.

Contributing

Contributing Guidelines

Read through our contributing guidelines to learn about our submission process, coding rules, and more.

Want to Help?

Want to report a bug, contribute some code, or improve the documentation? Excellent! Read up on our guidelines for contributing and then check out one of our issues labeled as help wanted or good first issue.

Code of Conduct

Help us keep Angular open and inclusive. Please read and follow our Code of Conduct.

Community

Join the conversation and help the community.

Love Angular badge

Love Angular? Give our repo a star ⬆️.