View source Improve this doc

# `FormController`
type in module `ng`

## Description

`FormController` keeps track of all its controls and nested forms as well as state of them, such as being valid/invalid or dirty/pristine.

Each `form` directive creates an instance of `FormController`.

## Methods

- ### $addControl()

  Register a control with the form.

  Input elements using ngModelController do this automatically when they are linked.

- ### $removeControl()

  Deregister a control from the form.

  Input elements using ngModelController do this automatically when they are destroyed.

- ### $setDirty()

  Sets the form to a dirty state.

  This method can be called to add the 'ng-dirty' class and set the form to a dirty state (ng-dirty class). This method will also propagate to parent forms.

- ### $setPristine()

  Sets the form to its pristine state.

  This method can be called to remove the 'ng-dirty' class and set the form to its pristine state (ng-pristine class). This method will also propagate to all the controls contained in this form.

  Setting a form back to a pristine state is often useful when we want to 'reuse' a form after saving or resetting it.

- ### $setValidity()

  Sets the validity of a form control.

  This method will also propagate to parent forms.

## Properties

- ### $pristine

  True if user has not interacted with the form yet.

- ### $dirty

  True if user has already interacted with the form.

- ### $valid

  True if all of the containing forms and controls are valid.

- ### $invalid

  True if at least one containing control or form is invalid.

- ### $error

  Is an object hash, containing references to all invalid controls or forms, where:

  - keys are validation tokens (error names) — such as `required`, `url` or `email`),
  - values are arrays of controls or forms that are invalid with given error.