NgModel
Создаёт экземпляр FormControl на основе доменной модели и связывает его с элементом управления формы.
API
class NgModel extends NgControl implements OnChanges ,OnDestroy {
constructor(parent: ControlContainer, validators: (ValidatorFn | Validator)[], asyncValidators: (AsyncValidatorFn | AsyncValidator)[], valueAccessors: ControlValueAccessor[], _changeDetectorRef?: ChangeDetectorRef | null | undefined, callSetDisabledState?: SetDisabledStateOption | undefined, injector?: Injector | undefined, renderer?: Renderer2 | undefined): NgModel;
readonly control: FormControl<any>;
@Input() name: string;
@Input('disabled') isDisabled: boolean;
@Input('ngModel') model: any;
@Input('ngModelOptions') options: { name?: string | undefined; standalone?: boolean | undefined; updateOn?: FormHooks | undefined; };
@Output('ngModelChange') update: EventEmitter<any>;
protected readonly shouldBindRequired: boolean;
readonly path: string[];
readonly formDirective: any;
viewToModelUpdate(newValue: any): void;
override valueAccessor: ControlValueAccessor | null;
protected override isCustomControlBased: boolean;
protected override readonly selectedValueAccessor: ControlValueAccessor | null;
protected override parseErrorsValidator: ValidatorFn | null;
protected override customControlBindings: { value?: unknown; disabled?: boolean | undefined; touched?: boolean | undefined; dirty?: boolean | undefined; valid?: boolean | undefined; invalid?: boolean | undefined; pending?: boolean | undefined; required?: boolean | undefined; errors?: ValidationErrors | null | undefined; } | null;
protected override setupCustomControl(): void;
protected override ngControlUpdate(host: ControlDirectiveHost<undefined>, bindRequired: boolean): void;
protected override removeParseErrorsValidator(control: AbstractControl<any, any, any> | null | undefined): void;
override readonly value: any;
override readonly valid: boolean | null;
override readonly invalid: boolean | null;
override readonly pending: boolean | null;
override readonly disabled: boolean | null;
override readonly enabled: boolean | null;
override readonly errors: ValidationErrors | null;
override readonly pristine: boolean | null;
override readonly dirty: boolean | null;
override readonly touched: boolean | null;
override readonly status: string | null;
override readonly untouched: boolean | null;
override readonly statusChanges: any;
override readonly valueChanges: any;
override readonly validator: ValidatorFn | null;
override readonly asyncValidator: AsyncValidatorFn | null;
override reset(value?: any): void;
override hasError(errorCode: string, path?: string | (string | number)[] | undefined): boolean;
override getError(errorCode: string, path?: string | (string | number)[] | undefined): any;
}
control
FormControl<any>name
stringОтслеживает имя, связанное с директивой. Если родительская форма существует, это имя используется как ключ для получения значения этого элемента управления.
isDisabled
booleanОтслеживает, отключён ли элемент управления.
model
anyОтслеживает значение, связанное с этой директивой.
options
{ name?: string | undefined; standalone?: boolean | undefined; updateOn?: FormHooks | undefined; }Отслеживает параметры конфигурации этого экземпляра ngModel.
name: Альтернатива заданию атрибута name для элемента управления формы. См. пример использования NgModel в качестве самостоятельного элемента управления.
standalone: Если задано значение true, ngModel не будет регистрироваться в родительской форме и будет вести себя так, будто не входит в неё. По умолчанию — false. Если родительская форма отсутствует, этот параметр не действует.
updateOn: Определяет событие, при котором обновляются значение и состояние валидности элемента управления формы. По умолчанию — 'change'. Возможные значения: 'change' | 'blur' | 'submit'.
update
EventEmitter<any>Генератор событий для создания события ngModelChange после обновления модели представления.
shouldBindRequired
booleanФормы на основе шаблонов обрабатывают required с помощью директивы RequiredValidator.
У этой директивы есть входной параметр required и привязка к хосту [attr.required]. Она является источником достоверных данных о том, является ли поле обязательным, поэтому отключите для неё обычную привязку элемента управления.
path
string[]Возвращает массив, представляющий путь от формы верхнего уровня до этого элемента управления. Каждый индекс — это строковое имя элемента управления на соответствующем уровне.
formDirective
anyДиректива верхнего уровня для этого элемента управления, если она есть; в противном случае — null.
viewToModelUpdate
voidУстанавливает новое значение модели представления и генерирует событие ngModelChange.
anyНовое значение, сгенерированное ngModelChange.
void
valueAccessor
ControlValueAccessor | nullАксессор значения для элемента управления
isCustomControlBased
booleanselectedValueAccessor
ControlValueAccessor | nullparseErrorsValidator
ValidatorFn | nullФункция-валидатор, возвращающая текущие ошибки разбора.
customControlBindings
{ value?: unknown; disabled?: boolean | undefined; touched?: boolean | undefined; dirty?: boolean | undefined; valid?: boolean | undefined; invalid?: boolean | undefined; pending?: boolean | undefined; required?: boolean | undefined; errors?: ValidationErrors | null | undefined; } | nullОтслеживает последние связанные значения, чтобы избежать ненужных обновлений FVC.
setupCustomControl
voidvoid
ngControlUpdate
voidControlDirectiveHost<undefined>
boolean
void
removeParseErrorsValidator
voidvoid
value
anyВозвращает значение элемента управления, если он существует; в противном случае — null.
valid
boolean | nullСообщает, является ли элемент управления валидным. Элемент управления считается валидным, если для текущего значения отсутствуют ошибки валидации. Если элемент управления отсутствует, возвращается null.
invalid
boolean | nullСообщает, является ли элемент управления невалидным, то есть содержит ли введённое значение ошибку. Если элемент управления отсутствует, возвращается null.
pending
boolean | nullСообщает, находится ли элемент управления в состоянии ожидания: выполняется асинхронная валидация, и ошибки для введённого значения пока недоступны. Если элемент управления отсутствует, возвращается null.
disabled
boolean | nullСообщает, отключён ли элемент управления, то есть отключён ли он в пользовательском интерфейсе, освобождён ли от проверок валидации и исключён ли из агрегированных значений родительских элементов управления. Если элемент управления отсутствует, возвращается null.
enabled
boolean | nullСообщает, включён ли элемент управления, то есть учитывается ли он при вычислении валидности или значения родительских элементов управления. Если элемент управления отсутствует, возвращается null.
errors
ValidationErrors | nullВозвращает ошибки валидации элемента управления. Если элемент управления отсутствует, возвращается null.
pristine
boolean | nullСообщает, находится ли элемент управления в исходном состоянии, то есть изменял ли пользователь значение в пользовательском интерфейсе. Если элемент управления отсутствует, возвращается null.
dirty
boolean | nullСообщает, изменял ли пользователь значение элемента управления в пользовательском интерфейсе. Если элемент управления отсутствует, возвращается null.
touched
boolean | nullСообщает, был ли элемент управления затронут, то есть вызвал ли пользователь для него событие blur. Если элемент управления отсутствует, возвращается null.
status
string | nullВозвращает статус валидации элемента управления. Возможные значения: 'VALID', 'INVALID', 'DISABLED' и 'PENDING'. Если элемент управления отсутствует, возвращается null.
untouched
boolean | nullСообщает, оставался ли элемент управления нетронутым, то есть вызывал ли пользователь для него событие blur. Если элемент управления отсутствует, возвращается null.
statusChanges
anyВозвращает мультикастовый наблюдаемый объект, который каждый раз выдаёт статус валидации при его вычислении для элемента управления. Если элемент управления отсутствует, возвращается null.
valueChanges
anyВозвращает мультикастовый наблюдаемый объект изменений значения элемента управления. Он генерирует событие каждый раз, когда значение элемента управления изменяется в пользовательском интерфейсе или программно. Если элемент управления отсутствует, возвращается null.
validator
ValidatorFn | nullФункция синхронной валидации, составленная из всех синхронных валидаторов, зарегистрированных в этой директиве.
asyncValidator
AsyncValidatorFn | nullФункция асинхронной валидации, составленная из всех асинхронных валидаторов, зарегистрированных в этой директиве.
reset
voidСбрасывает элемент управления, устанавливая заданное значение, если элемент управления существует.
any
void
hasError
booleanСообщает, есть ли у элемента управления по указанному пути заданная ошибка.
stringКод ошибки для проверки
string | (string | number)[] | undefinedСписок имён элементов управления, задающий путь от текущего элемента управления до элемента, ошибки которого нужно проверить.
booleanЕсть ли указанная ошибка у элемента управления по заданному пути.
Если элемент управления отсутствует, возвращается false.
Например, для следующей FormGroup:
form = new FormGroup({
address: new FormGroup({ street: new FormControl() })
});
Путь от корневой формы до элемента управления 'street' будет таким: 'address' -> 'street'.
Его можно передать этому методу в одном из двух форматов:
- Массив строковых имён элементов управления, например
['address', 'street'] - Список имён элементов управления, разделённых точками и записанных одной строкой, например
'address.street'
Если путь не указан, метод проверяет наличие ошибки у текущего элемента управления.
getError
anyВозвращает данные об ошибке для элемента управления по указанному пути.
stringКод ошибки для проверки
string | (string | number)[] | undefinedСписок имён элементов управления, задающий путь от текущего элемента управления до элемента, ошибки которого нужно проверить.
anyДанные об этой ошибке. Если элемент управления или ошибка отсутствуют, возвращается null.
Например, для следующей FormGroup:
form = new FormGroup({
address: new FormGroup({ street: new FormControl() })
});
Путь от корневой формы до элемента управления 'street' будет таким: 'address' -> 'street'.
Его можно передать этому методу в одном из двух форматов:
- Массив строковых имён элементов управления, например
['address', 'street'] - Список имён элементов управления, разделённых точками и записанных одной строкой, например
'address.street'
Описание
Создаёт экземпляр FormControl на основе доменной модели и связывает его с элементом управления формы.
Экземпляр FormControl отслеживает значение, взаимодействие с пользователем и статус валидации элемента управления, а также синхронизирует представление с моделью. Если директива используется внутри родительской формы, она также регистрирует себя в форме как дочерний элемент управления.
Эту директиву можно использовать отдельно или как часть более крупной формы. Чтобы активировать её, используйте селектор ngModel.
Директива принимает доменную модель в качестве необязательного Input. Если используется односторонняя привязка к ngModel с синтаксисом [], изменение значения доменной модели в классе компонента задаёт значение в представлении. Если используется двусторонняя привязка с синтаксисом [()] (также известным как «синтаксис банана в коробке»), значение в пользовательском интерфейсе всегда синхронизируется с доменной моделью в классе.
Чтобы проверить свойства связанного FormControl (например, состояние валидности), экспортируйте директиву в локальную переменную шаблона, используя ngModel в качестве ключа (например, #myVar="ngModel"). Затем можно получить доступ к элементу управления через свойство field директивы. Однако наиболее часто используемые свойства (например, valid и dirty) доступны и непосредственно у элемента управления. Полный список доступных напрямую свойств см. в разделе AbstractControlDirective.
Экспортируется из
Примечания по использованию
Использование ngModel для самостоятельного элемента управления
В следующих примерах показан простой самостоятельный элемент управления с использованием ngModel:
import {Component} from '@angular/core';
@Component({
selector: 'example-app',
template: `
<input [(ngModel)]="name" #ctrl="ngModel" required />
<p>Value: {{ name }}</p>
<p>Valid: {{ ctrl.valid }}</p>
<button (click)="setValue()">Set value</button>
`,
standalone: false,
})
export class SimpleNgModelComp {
name: string = '';
setValue() {
this.name = 'Nancy';
}
}
При использовании ngModel внутри тегов <form> необходимо также указать атрибут name, чтобы элемент управления можно было зарегистрировать в родительской форме под этим именем.
В контексте родительской формы односторонняя или двусторонняя привязка часто не нужна, поскольку родительская форма синхронизирует значение за вас. Доступ к свойствам формы можно получить, экспортировав её в локальную переменную шаблона с помощью ngForm, например (#f="ngForm"). Используйте эту переменную при необходимости во время отправки формы.
Если нужно задать начальные значения формы, обычно достаточно односторонней привязки для ngModel, при условии что при отправке используется значение экспортированной формы, а не значение доменной модели.
Использование ngModel внутри формы
В следующем примере показаны элементы управления с использованием ngModel внутри формы:
import {Component} from '@angular/core';
import {NgForm} from '@angular/forms';
@Component({
selector: 'example-app',
template: `
<form #f="ngForm" (ngSubmit)="onSubmit(f)" novalidate>
<input name="first" ngModel required #first="ngModel" />
<input name="last" ngModel />
<button>Submit</button>
</form>
<p>First name value: {{ first.value }}</p>
<p>First name valid: {{ first.valid }}</p>
<p>Form value: {{ f.value | json }}</p>
<p>Form valid: {{ f.valid }}</p>
`,
standalone: false,
})
export class SimpleFormComp {
onSubmit(f: NgForm) {
console.log(f.value); // { first: '', last: '' }
console.log(f.valid); // false
}
} Использование самостоятельного ngModel внутри группы
В следующем примере показано, как использовать самостоятельный элемент управления ngModel внутри формы. Он управляет отображением формы, но не содержит данные формы.
<form>
<input name="login" ngModel placeholder="Login">
<input type="checkbox" ngModel [ngModelOptions]="{standalone: true}"> Show more options?
</form>
<!-- form value: {login: ''} --> Задание атрибута name для ngModel с помощью параметров
В следующем примере показан альтернативный способ задать атрибут name. Здесь атрибут с именем name используется в компоненте пользовательского элемента управления формы. Чтобы при этом задать имя NgModel, необходимо вместо этого указать его с помощью входного параметра ngModelOptions.
<form>
<my-custom-form-control name="Nancy" ngModel [ngModelOptions]="{name: 'user'}">
</my-custom-form-control>
</form>
<!-- form value: {user: ''} -->
Super-powered by Google ©2010–2025.
Code licensed under an MIT-style License. Documentation licensed under CC BY 4.0.
https://angular.dev/api/forms/NgModel