NgModel • Angular

Using ngModel on a standalone control

The following examples show a simple standalone control using 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';  }}

When using the ngModel within <form> tags, you'll also need to supply a name attribute so that the control can be registered with the parent form under that name.

In the context of a parent form, it's often unnecessary to include one-way or two-way binding, as the parent form syncs the value for you. You access its properties by exporting it into a local template variable using ngForm such as (#f="ngForm"). Use the variable where needed on form submission.

If you do need to populate initial values into your form, using a one-way binding for ngModel tends to be sufficient as long as you use the exported form's value rather than the domain model's value on submit.

Using ngModel within a form

The following example shows controls using ngModel within a form:

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  }}

Using a standalone ngModel within a group

The following example shows you how to use a standalone ngModel control within a form. This controls the display of the form, but doesn't contain form data.

<form>  <input name="login" ngModel placeholder="Login">  <input type="checkbox" ngModel [ngModelOptions]="{standalone: true}"> Show more options?</form><!-- form value: {login: ''} -->

Setting the ngModel name attribute through options

The following example shows you an alternate way to set the name attribute. Here, an attribute identified as name is used within a custom form control component. To still be able to specify the NgModel's name, you must specify it using the ngModelOptions input instead.

<form>  <my-custom-form-control name="Nancy" ngModel [ngModelOptions]="{name: 'user'}">  </my-custom-form-control></form><!-- form value: {user: ''} -->