All Course > Angular > Data Binding And Directives Feb 16, 2025

Angular Data Binding: One-Way & Two-Way Binding Explained

In the last lesson, we explored Angular modules and architecture, which laid the foundation for building scalable web apps. We learned how to organize an Angular app into modules, components, and services, which work together to create a robust structure. Now, it’s time to dive into one of Angular’s most powerful features: data binding. In this lesson, we’ll cover one-way and two-way data binding, including property binding, event binding, and the ngModel directive. By the end, you’ll know how to bind data seamlessly between your app’s UI and logic.

Understanding Data Binding in Angular

Data binding is the process that connects your app’s data (stored in TypeScript) with the user interface (HTML). Angular offers several ways to bind data, each suited for different use cases. For example, I once built a weather app where I needed to display real-time temperature updates. Using Angular’s data binding, I could easily show the latest data without refreshing the page. Let’s break down the types of data binding:

Interpolation

This is the simplest form of one-way binding. It lets you display data in your template using double curly braces {{ }}. For instance, if you have a variable temperature in your component, you can display it like this:

<p>Current Temperature: {{ temperature }}°C</p>

Here, Angular replaces {{ temperature }} with the actual value of the temperature variable.

Property Binding

This binds data from the component to an HTML element’s property. For example, if you want to disable a button based on a condition, you can use property binding like this:

<button [disabled]="isDisabled">Submit</button>

Here, the button’s disabled property is bound to the isDisabled variable in your component.

Event Binding

This binds user actions (like clicks or keystrokes) to methods in your component. For example, if you want to handle a button click, you can use event binding like this:

<button (click)="onSubmit()">Submit</button>

Here, the onSubmit() method in your component will be called when the button is clicked.

Two-Way Binding

This combines property and event binding to keep the UI and component data in sync. Angular’s ngModel directive makes this easy. For example, if you want to bind an input field to a variable, you can do this:

<input [(ngModel)]="username" placeholder="Enter your name">

Here, any change in the input field will update the username variable, and vice versa.

Step-by-Step Guide to Implementing Data Binding

Let’s walk through the steps to implement each type of data binding in an Angular app.

Interpolation

Define a variable in your component:

export class AppComponent {
  temperature = 25;
}

Use interpolation in your template:

<p>Current Temperature: {{ temperature }}°C</p>

Property Binding

Define a variable in your component:

export class AppComponent {
  isDisabled = true;
}

Bind it to an HTML property:

<button [disabled]="isDisabled">Submit</button>

Event Binding

Define a method in your component:

export class AppComponent {
  onSubmit() {
    alert('Form submitted!');
  }
}
````
Bind it to an event in your template:

```html
<button (click)="onSubmit()">Submit</button>

Two-Way Binding

Import FormsModule in your app module:

import { FormsModule } from '@angular/forms';
@NgModule({
  imports: [FormsModule],
})
export class AppModule {}

Use ngModel in your template:

<input [(ngModel)]="username" placeholder="Enter your name">
<p>Hello, {{ username }}!</p>

Practical Use Case: Building a Simple Form

Let’s build a simple form that uses all types of data binding. Imagine you’re creating a sign-up form where users enter their name and email. Here’s how you can do it:

Component Code:

export class AppComponent {
  username = '';
  email = '';
  isSubmitted = false;

  onSubmit() {
    this.isSubmitted = true;
  }
}

Template Code:

<form>
  <label for="username">Name:</label>
  <input [(ngModel)]="username" id="username" name="username" placeholder="Enter your name">

  <label for="email">Email:</label>
  <input [(ngModel)]="email" id="email" name="email" placeholder="Enter your email">

  <button (click)="onSubmit()">Submit</button>
</form>

<div *ngIf="isSubmitted">
  <p>Thank you, {{ username }}! We'll contact you at {{ email }}.</p>
</div>

This form uses two-way binding for the input fields, event binding for the submit button, and interpolation to display the submitted data.

Conclusion

In this lesson, we explored Angular’s data binding features, which are essential for creating dynamic and interactive web apps. We covered interpolation, property binding, event binding, and two-way binding with ngModel. By practicing these concepts, you can build apps that respond to user input and display real-time data. In the next lesson, we’ll dive into Angular directives like ngIf, ngFor, and ngSwitch, which will help you control the flow of your app’s UI. Stay tuned!

Comments

There are no comments yet.

Write a comment

You can use the Markdown syntax to format your comment.

Tags: angular typescript