NgModelGroup

directive

npm Package @angular/forms
Module import { NgModelGroup } from '@angular/forms';
Source forms/src/directives/ng_model_group.ts

Creates and binds a FormGroup instance to a DOM element.

Overview

@Directive({ selector: '[ngModelGroup]', providers: [modelGroupProvider], exportAs: 'ngModelGroup' })
class NgModelGroup extends AbstractFormGroupDirective implements OnInit, OnDestroy {
  name: string
  // inherited from forms/AbstractFormGroupDirective
  ngOnInit(): void
  ngOnDestroy(): void
  get control: FormGroup
  get path: string[]
  get formDirective: Form|null
  get validator: ValidatorFn|null
  get asyncValidator: AsyncValidatorFn|null
  // inherited from forms/ControlContainer
  name: string
  get formDirective: Form|null
  get path: string[]|null
  // inherited from forms/AbstractControlDirective
  get control: AbstractControl|null
  get value: any
  get valid: boolean|null
  get invalid: boolean|null
  get pending: boolean|null
  get disabled: boolean|null
  get enabled: boolean|null
  get errors: ValidationErrors|null
  get pristine: boolean|null
  get dirty: boolean|null
  get touched: boolean|null
  get untouched: boolean|null
  get statusChanges: Observable<any>|null
  get valueChanges: Observable<any>|null
  get path: string[]|null
  reset(value: any = undefined): void
  hasError(errorCode: string, path?: string[]): boolean
  getError(errorCode: string, path?: string[]): any
}

How To Use

This directive can only be used as a child of NgForm (or in other words, within <form> tags).

Use this directive if you'd like to create a sub-group within a form. This can come in handy if you want to validate a sub-group of your form separately from the rest of your form, or if some values in your domain model make more sense to consume together in a nested object.

Pass in the name you'd like this sub-group to have and it will become the key for the sub-group in the form's full value. You can also export the directive into a local template variable using ngModelGroup (ex: #myGroup="ngModelGroup").

import {Component} from '@angular/core';
import {NgForm} from '@angular/forms';

@Component({
  selector: 'example-app',
  template: `
    <form #f="ngForm" (ngSubmit)="onSubmit(f)">
      <p *ngIf="nameCtrl.invalid">Name is invalid.</p>
    
      <div ngModelGroup="name" #nameCtrl="ngModelGroup">
        <input name="first" [ngModel]="name.first" minlength="2">
        <input name="last" [ngModel]="name.last" required>
      </div>
      
      <input name="email" ngModel> 
      <button>Submit</button>
    </form>
    
    <button (click)="setValue()">Set value</button>
  `,
})
export class NgModelGroupComp {
  name = {first: 'Nancy', last: 'Drew'};

  onSubmit(f: NgForm) {
    console.log(f.value);  // {name: {first: 'Nancy', last: 'Drew'}, email: ''}
    console.log(f.valid);  // true
  }

  setValue() { this.name = {first: 'Bess', last: 'Marvin'}; }
}

Selectors

[ngModelGroup]

Inputs

ngModelGroup bound to NgModelGroup.name

Exported as

ngModelGroup

Constructor

constructor(parent: ControlContainer, validators: any[], asyncValidators: any[])

Members

name: string

© 2010–2017 Google, Inc.
Licensed under the Creative Commons Attribution License 4.0.
https://v4.angular.io/api/forms/NgModelGroup