Spec-Zone.ru › Angular 2

NgModel

Stable Directive

Что делает

Создаёт экземпляр FormControl из модели домена и привязывает его к элементу управления формой.

Экземпляр FormControl будет отслеживать значение, взаимодействие пользователя и состояние валидации элемента управления и синхронизировать представление с моделью. Если используется в родительской форме, директива также зарегистрирует себя в форме как управляющий элемент.

Как использовать

Эта директива может использоваться сама по себе или как часть большей формы. Всё, что вам нужно, это селектор ngModel для её активации.

Она принимает модель домена в качестве необязательного @Input. Если у вас есть односторонняя привязка к ngModel с синтаксисом [], изменение значения модели домена в классе компонента установит значение в представлении. Если у вас есть двусторонняя привязка с синтаксисом [()] (также известная как синтаксис «банановой коробки»), значение в пользовательском интерфейсе всегда будет синхронизироваться обратно с моделью домена в вашем классе.

Если вы хотите проверить свойства связанного FormControl (например, состояние валидности), вы также можете экспортировать директиву в локальную переменную шаблона, используя ngModel в качестве ключа (например: #myVar="ngModel"). Затем вы можете получить доступ к элементу управления, используя свойство директивы control, но большинство необходимых свойств (например, valid и dirty) будут переданы элементу управления, поэтому вы можете получить к ним доступ напрямую. Полный список свойств, доступных напрямую, представлен в AbstractControlDirective.

Ниже приведён пример простого автономного элемента управления, использующего 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>
  `,
})
export class SimpleNgModelComp {
  name: string = '';

  setValue() { this.name = 'Nancy'; }
}

При использовании ngModel внутри тегов <form>, вам также необходимо указать атрибут name, чтобы элемент управления мог быть зарегистрирован в родительской форме под этим именем.

Стоит отметить, что в контексте родительской формы вы часто можете обойтись без односторонней или двусторонней привязки, потому что родительская форма синхронизирует значение за вас. Вы можете получить доступ к её свойствам, экспортировав её в локальную переменную шаблона, используя ngForm (например: #f="ngForm"). Затем вы можете передать её туда, где это необходимо, при отправке.

Если вам необходимо заполнить начальные значения в вашей форме, использование односторонней привязки для 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>
  `,
})
export class SimpleFormComp {
  onSubmit(f: NgForm) {
    console.log(f.value);  // { first: '', last: '' }
    console.log(f.valid);  // false
  }
}

Для ознакомления с примерами ngModel с различными типами элементов управления формой, см.:

  • Радиокнопки: RadioControlValueAccessor
  • Выпадающие списки: SelectControlValueAccessor

пакет npm: @angular/forms

NgModule: FormsModule

Обзор класса

class NgModel extends NgControl implements OnChanges, 
  constructor(parent: ControlContainer, validators: Array<Validator|ValidatorFn>, asyncValidators: Array<Validator|AsyncValidatorFn>, valueAccessors: ControlValueAccessor[])
  
  
  viewModel : any
  name : string
  isDisabled : boolean
  model : any
  options : {name?: string, standalone?: boolean}
  update : EventEmitter
  ngOnChanges(changes: SimpleChanges)
  ngOnDestroy() : void
  control : FormControl
  path : string[]
  formDirective : any
  validator : ValidatorFn
  asyncValidator : AsyncValidatorFn
  viewToModelUpdate(newValue: any) : void
}

Селекторы

[ngModel]:not([formControlName]):not([formControl])

Экспортировано как

ngModel

Описание класса

Конструктор

constructor(parent: ControlContainer, validators: Array<Validator|ValidatorFn>, asyncValidators: Array<Validator|AsyncValidatorFn>, valueAccessors: ControlValueAccessor[])

Подробности класса

viewModel : any
name : string
isDisabled : boolean
model : any
options : {name?: string, standalone?: boolean}
update : EventEmitter
ngOnChanges(changes: SimpleChanges)
ngOnDestroy() : void
control : FormControl
path : string[]
formDirective : any
validator : ValidatorFn
asyncValidator : AsyncValidatorFn
viewToModelUpdate(newValue: any) : void

экспортировано из @angular/forms/index, определено в @angular/forms/src/directives/ng_model.ts

© 2010–2017 Google, Inc.
Licensed under the Creative Commons Attribution License 4.0.
https://v2.angular.io/docs/ts/latest/api/forms/index/NgModel-directive.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API