Table of Contents

Template Driven Form

In order to use ngForm, we need to import the Form module ni app.module.ts and your component.

component.html

When the submit button is clicked, we have the form to call function logForm(form.value).

<form #form="ngForm" (ngSubmit)="logForm(form.value)">
  <label>Firstname:</label>
  <input type="text" name="firstName" ngModel>
  <br>
  <label>Lastname:</label>
  <input type="text" name="lastName" ngModel>
  <br>
  <button type="submit">Submit</button>
</form>

component.ts

import { Component, OnInit } from '@angular/core';
import {Form} from "@angular/forms";

@Component({
  selector: 'app-my-form',
  templateUrl: './my-form.component.html',
  styleUrls: ['./my-form.component.css']
})
export class MyFormComponent implements OnInit {

  constructor() { }

  ngOnInit() {
  }

  logForm(value: Form) {
    console.log(value);

  }
}

Output

The following output will print in the console.

Object { firstName: "first name", lastName: "last name" }

Additional Info

Item can be grouped by ngModelGroup, such as:

<form #form="ngForm" (ngSubmit)="logForm(form.value)">
  <label>Firstname:</label>
  <input type="text" name="firstName" ngModel>
  <br>
  <label>Lastname:</label>
  <input type="text" name="lastName" ngModel>
  <br>
  <fieldset ngModelGroup="personalInfo">
    <label>phone:</label>
    <input type="text" name="phone" ngModel>
    <br>
    <label>Address:</label>
    <input type="text" name="address" ngModel>
  </fieldset>
  <button type="submit">Submit</button>
</form>
​

The result would look like the following on click.

firstName: "first "
​lastName: "last"
​personalInfo: {…}
​​   address: "my addess, HK"
   ​​phone: "123456789"