mirror of
https://github.com/angular/angular
synced 2026-05-24 09:28:37 +00:00
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.
30 lines
890 B
TypeScript
30 lines
890 B
TypeScript
/**
|
|
* @license
|
|
* Copyright Google LLC All Rights Reserved.
|
|
*
|
|
* Use of this source code is governed by an MIT-style license that can be
|
|
* found in the LICENSE file at https://angular.dev/license
|
|
*/
|
|
|
|
/**
|
|
* The list of error codes used in runtime code of the `forms` package.
|
|
* Reserved error code range: 1900-1999.
|
|
*/
|
|
export const enum SignalFormsErrorCode {
|
|
// Signal Forms errors (1900-1999)
|
|
PATH_NOT_IN_FIELD_TREE = 1900,
|
|
PATH_RESOLUTION_FAILED = 1901,
|
|
ORPHAN_FIELD_PROPERTY = 1902,
|
|
ORPHAN_FIELD_ARRAY = 1903,
|
|
ORPHAN_FIELD_NOT_FOUND = 1904,
|
|
ROOT_FIELD_NO_PARENT = 1905,
|
|
PARENT_NOT_ARRAY = 1906,
|
|
ABSTRACT_CONTROL_IN_FORM = 1907,
|
|
PATH_OUTSIDE_SCHEMA = 1908,
|
|
UNKNOWN_BUILDER_TYPE = 1909,
|
|
UNKNOWN_STATUS = 1910,
|
|
COMPAT_NO_CHILDREN = 1911,
|
|
MANAGED_METADATA_LAZY_CREATION = 1912,
|
|
BINDING_ALREADY_REGISTERED = 1913,
|
|
INVALID_FIELD_DIRECTIVE_HOST = 1914,
|
|
}
|