CodeShot

Reactive Forms در مقابل Template-driven Forms

Reactive Forms ساختار فرم را به‌طور کامل در کد TypeScript با FormGroup و FormControl تعریف می‌کند و کنترل و تست‌پذیری بالایی دارد، در حالی که Template-driven Forms عمدتاً در HTML با دایرکتیوهایی مثل ngModel تعریف می‌شود و برای فرم‌های ساده سریع‌تر نوشته می‌شود.

ویژگیReactive FormsTemplate-driven Forms
محل تعریف ساختارکد TypeScriptقالب HTML
تست‌پذیریبالاپایین‌تر
مناسب برایفرم‌های پیچیدهفرم‌های ساده

کِی از Reactive Forms استفاده کنیم؟

وقتی فرم پیچیده است، نیاز به اعتبارسنجی دینامیک، تست واحد آسان یا واکنش به تغییرات مقادیر در زمان واقعی دارید.

کِی از Template-driven Forms استفاده کنیم؟

وقتی فرم ساده است (مثل یک فرم تماس کوتاه) و می‌خواهید سریع و با کد کم آن را در قالب HTML بنویسید.

مثال Reactive Forms

form = new FormGroup({
  email: new FormControl('', [Validators.required, Validators.email])
});

مثال Template-driven Forms

<form #f="ngForm">
  <input name="email" ngModel required email />
</form>

اشتباه رایج

اشتباه رایج ترکیب نامنظم این دو رویکرد در یک فرم (بخشی Reactive و بخشی Template-driven) است که باعث سردرگمی در مدیریت وضعیت فرم می‌شود؛ باید در کل یک فرم فقط از یکی از این دو الگو استفاده کرد.

جمع‌بندی

برای فرم‌های پیچیده و نیازمند تست از Reactive Forms و برای فرم‌های ساده و سریع از Template-driven Forms استفاده کنید.