Angular: Understanding ngModelOptions in Template-Driven Forms: change, blur, and submit

Abhishek Wadalkar
3 min readSep 15, 2024

Introduction

Angular provides two main ways to create forms: template-driven and reactive. In template-driven forms, we rely on directives such as ngModel and ngModelOptions to bind form controls to model properties. One important feature is the ngModelOptions directive, which allows us to configure how and when the model is updated.

In this post, we’ll explore how ngModelOptions works in template-driven forms and focus on using the updateOn property with change, blur, and submit events. Additionally, we will touch on the standalone option and how it impacts form validation and control association.

What is ngModelOptions?

The ngModelOptions directive is a powerful way to control the behavior of ngModel in template-driven forms. It allows us to specify when the model should be updated by providing an object that can contain multiple configuration options, such as the name, updateOn, and standalone properties.

The syntax looks like this:

<input [(ngModel)]="title" [ngModelOptions]="{name: 'title', updateOn: 'blur', standalone: false}">

In this example:

  • name: The name assigned to this model. It is useful when you're debugging or referencing the model in the form.
  • updateOn: Defines when the model is updated, such as on change, blur, or submit.
  • standalone: Controls whether the form control is part of the parent form or operates independently.

updateOn: When Should the Model Be Updated?

1. change (Default Behavior)

By default, Angular updates the model whenever the input value changes (i.e., on every keystroke). This is useful for real-time validation or live updates but might not always be necessary.

<input [(ngModel)]="title" [ngModelOptions]="{name: 'title', updateOn: 'change'}">

Here, the model will be updated immediately whenever the user types into the input field.

2. blur

Sometimes, it’s more efficient to update the model only when the user leaves (blurs) the input field. This reduces the number of unnecessary model updates, improving performance and making the form less noisy.

<input [(ngModel)]="title" [ngModelOptions]="{name: 'title', updateOn: 'blur'}">

This setting ensures that the model is updated only when the input field loses focus, which can be useful in scenarios where we don’t need immediate updates, such as data-heavy forms.

3. submit

Another option is to update the model only when the form is submitted. This approach delays model updates until the user confirms their input by submitting the form.

<form (ngSubmit)="onSubmit()">
<input [(ngModel)]="title" [ngModelOptions]="{name: 'title', updateOn: 'submit'}">
<button type="submit">Submit</button>
</form>

In this case, the model is updated only when the user clicks the submit button, making it useful in cases where we don’t need validation until the form is complete.

What is standalone?

By default, form controls created with ngModel are part of the parent form. However, you might have some form controls that don’t need to be included in form validation or that should work independently of the parent form. The standalone option can be used to make a control independent from the parent form.

The syntax looks like this:

<input [(ngModel)]="title" [ngModelOptions]="{name: 'title', updateOn: 'blur', standalone: true}">

In this example:

  • standalone: false means that the form control is part of the parent form and will be validated and managed with the parent form group.
  • standalone: true means that the form control operates independently and won’t participate in the validation or state of the parent form.

Conclusion

The ngModelOptions directive in Angular is a powerful tool for fine-tuning how and when your model is updated in template-driven forms. Whether you need to update the model on every change, when the input loses focus, or upon form submission, ngModelOptions gives you that flexibility. Additionally, the standalone option allows you to isolate certain controls from the form, providing even more control over form behavior.

By understanding and utilizing these options, you can optimize your form performance and user experience.

--

--

Abhishek Wadalkar
Abhishek Wadalkar

Written by Abhishek Wadalkar

Passionate Frontend developer with 4 years experience, crafting seamless, user-centric web experiences. Exploring the world of web development and constantly.

No responses yet