دوره‌ها / Angular / Two-way Binding (Two-way Binding)

Two-way Binding (Two-way Binding)

15 دقیقه Article

Two-Way Binding: جادوی همگام‌سازی 🪄

Two-Way Binding ترکیبی از Property Binding و Event Binding است. این یعنی داده‌ها همزمان هم نمایش داده می‌شوند و هم با تغییر توسط کاربر، به‌روز می‌شوند.

چرا به آن نیاز داریم؟

فرض کنید یک فرم دارید. می‌خواهید وقتی کاربر نامش را تایپ می‌کند، همزمان متغیر username در کلاس شما آپدیت شود و اگر شما متغیر را در کد تغییر دادید، مقدار اینپوت هم تغییر کند. این کار با Two-Way Binding انجام می‌شود.

فعال‌سازی FormsModule:

برای استفاده از Two-Way Binding، باید ماژول FormsModule را به پروژه اضافه کنید.

1. فایل app.module.ts را باز کنید.

2. FormsModule را ایمپورت و به آرایه imports اضافه کنید:

import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { FormsModule } from '@angular/forms'; // 1. Import

import { AppComponent } from './app.component';

@NgModule({
  declarations: [
    AppComponent
  ],
  imports: [
    BrowserModule,
    FormsModule // 2. Add to imports
  ],
  providers: [],
  bootstrap: [AppComponent]
})
export class AppModule { }

سینتکس "Banana in a Box":

سینتکس Two-Way Binding به شکل [(ngModel)] است که به آن "موز در جعبه" می‌گویند (چون پرانتز مثل موز و براکت مثل جعبه است)!


<input type="text" [(ngModel)]="username">

Hello {{ username }}!

// در TS
username = 'Initial Value';

حالا اگر در input تایپ کنید، متن پاراگراف همزمان تغییر می‌کند. جادویی است!

💡 نکته: ngModel یک دایرکتیو (Directive) است که کارهای سخت را پشت صحنه انجام می‌دهد. در واقع معادل کد زیر است:
[ngModel]="username" (ngModelChange)="username = $event"
✅ یاد گرفتید: Two-Way Binding کار با فرم‌ها را بسیار ساده می‌کند و داده‌ها را همیشه همگام نگه می‌دارد.

تمرین‌های عملی

برای تثبیت یادگیری این درس تمرین‌های زیر را حل کنید

تمرین: Two-way Binding Easy
سوال تمرین

🎯 تمرین: Input با ngModel

یک input با two-way binding بسازید که نام کاربر رو نمایش بده.

پاسخ تمرین
TYPESCRIPT
// component.ts
export class UserComponent {
  name = '';
}

<!-- template.html -->
<input [(ngModel)]="name" placeholder="Enter name">
<p>Your name: {{ name }}</p>

آماده رفتن به درس بعدی هستید؟

این درس را به پایان رساندید و می‌توانید به درس بعدی بروید.