Yükleniyor...

Formlara Giriş

Formlar, Angular uygulamalarında kullanıcıların veri girmesini, düzenlemesini ve sunmasını sağlayan temel bileşenlerdir. Angular, form yönetimi için iki ana yaklaşım sunar: Template-driven Forms (Şablon Tabanlı Formlar) ve Reactive Forms (Tepkisel Formlar). Template-driven Forms, basit ve küçük formlar için uygundur ve ngModel ile çift yönlü veri bağlama sağlar. Reactive Forms ise daha büyük ve karmaşık formlarda güçlü bir kontrol ve validasyon mekanizması sunar.
Angular’da formları doğru kullanmak, veri akışını yönetmek, bileşenlerin durumunu takip etmek ve lifecycle yönetimi yapmak için kritik öneme sahiptir. Formlar ayrıca kullanıcı etkileşimlerini kontrol etmenizi, hataları yakalamanızı ve uygulamanın veri bütünlüğünü korumanızı sağlar.
Bu bölümde, temel form oluşturmayı, form verilerini takip etmeyi, validasyon uygulamayı ve gönderim işlemlerini öğreneceksiniz. Ayrıca form verilerini farklı bileşenler arasında paylaşmayı ve modern SPA mimarisi içerisinde formların nasıl yönetildiğini göreceksiniz. Öğrenciler, Angular’ın veri akışı ve bileşen yaşam döngüsü ile form yönetimini bütünleştirmeyi deneyimleyecekler.

Temel Örnek

typescript
TYPESCRIPT Code
import { Component } from '@angular/core';
import { FormsModule } from '@angular/forms';

@Component({
selector: 'app-temel-form',
standalone: true,
imports: [FormsModule],
template: ` <h2>Temel Form</h2>
<form (ngSubmit)="gonder()"> <label>İsim:</label>
<input type="text" [(ngModel)]="kullanici.isim" name="isim" required>

<label>Email:</label>
<input type="email" [(ngModel)]="kullanici.email" name="email" required>

<button type="submit">Gönder</button>
</form>
<p *ngIf="gonderildi">Gönderilen Veri: {{ kullanici | json }}</p>

`
})
export class TemelFormComponent {
kullanici = { isim: '', email: '' };
gonderildi = false;

gonder() {
this.gonderildi = true;
}
}

Bu örnekte FormsModule kullanılarak ngModel ile çift yönlü veri bağlama sağlanmıştır. kullanici nesnesi formun durumunu temsil ederken, gonderildi formun gönderilip gönderilmediğini takip eder.
[(ngModel)] direktifi, input alanı ile bileşen içindeki model arasında anlık veri senkronizasyonu sağlar. (ngSubmit) ise form gönderildiğinde gonder() metodunu çağırarak veri işlemlerini yönetir. Bu yapı, form yönetimi, durum kontrolü ve veri akışı konularını basit bir şekilde göstermektedir. Ayrıca prop drilling ve gereksiz re-render problemlerinden kaçınmaya yardımcı olur.

Pratik Örnek

typescript
TYPESCRIPT Code
import { Component } from '@angular/core';
import { ReactiveFormsModule, FormGroup, FormControl, Validators } from '@angular/forms';

@Component({
selector: 'app-pratik-form',
standalone: true,
imports: [ReactiveFormsModule],
template: ` <h2>Reactive Form Örneği</h2>
<form [formGroup]="form" (ngSubmit)="gonder()"> <label>Kullanıcı Adı:</label> <input type="text" formControlName="kullaniciAdi">
<div *ngIf="form.get('kullaniciAdi')?.invalid && form.get('kullaniciAdi')?.touched">
Kullanıcı adı zorunludur. </div>

<label>Şifre:</label>
<input type="password" formControlName="sifre">
<div *ngIf="form.get('sifre')?.invalid && form.get('sifre')?.touched">
Şifre en az 6 karakter olmalıdır.
</div>

<button type="submit" [disabled]="form.invalid">Kaydet</button>
</form>
<p *ngIf="gonderildi">Form Verisi: {{ form.value | json }}</p>

`
})
export class PratikFormComponent {
form = new FormGroup({
kullaniciAdi: new FormControl('', Validators.required),
sifre: new FormControl('', [Validators.required, Validators.minLength(6)])
});

gonderildi = false;

gonder() {
this.gonderildi = true;
}
}

Advanced Angular Implementation

typescript
TYPESCRIPT Code
import { Component, OnInit, OnDestroy } from '@angular/core';
import { FormBuilder, FormGroup, Validators } from '@angular/forms';
import { Subscription } from 'rxjs';

@Component({
selector: 'app-ileri-form',
template: ` <h2>İleri Düzey Form</h2>
<form [formGroup]="profilForm" (ngSubmit)="gonder()"> <label>Ad Soyad:</label> <input formControlName="adSoyad">

<label>Yaş:</label>
<input type="number" formControlName="yas">

<label>Email:</label>
<input type="email" formControlName="email">

<button type="submit" [disabled]="profilForm.invalid">Kaydet</button>
</form>

`
})
export class IleriFormComponent implements OnInit, OnDestroy {
profilForm!: FormGroup;
sub!: Subscription;

constructor(private fb: FormBuilder) {}

ngOnInit() {
this.profilForm = this.fb.group({
adSoyad: ['', Validators.required],
yas: [null, [Validators.required, Validators.min(18)]],
email: ['', [Validators.required, Validators.email]]
});

this.sub = this.profilForm.valueChanges.subscribe(val => console.log('Değişiklik:', val));

}

gonder() {
if (this.profilForm.valid) {
console.log('Kaydedilen Veri:', this.profilForm.value);
}
}

ngOnDestroy() {
this.sub.unsubscribe();
}
}

Angular’da formlar için en iyi uygulamalar, bileşen mantığı ile form durumunu ayrı tutmak, state mutasyonlarından kaçınmak ve veri akışını optimize etmektir. Reactive Forms, karmaşık validasyon ve lifecycle yönetimi için daha uygundur.
Yaygın hatalar arasında prop drilling, gereksiz render işlemleri ve form durumunu doğrudan değiştirmek vardır. Performans optimizasyonu için OnPush change detection stratejisi kullanılabilir. Form verilerinin güvenliği için hem client hem de server taraflı validasyon önemlidir.

📊 Kapsamlı Referans

Angular Element/Method Description Syntax Example Notes
FormGroup Kontrol grubu oluşturur new FormGroup({...}) new FormGroup({isim: new FormControl('')}) Reactive Forms yönetimi
FormControl Bireysel kontrol new FormControl(val, Validators) new FormControl('', Validators.required) Input alanları için
ngModel Çift yönlü veri bağlama [(ngModel)]="val" <input [(ngModel)]="kullanici.isim"> Template-driven Forms
Validators.required Zorunlu alan validasyonu Validators.required new FormControl('', Validators.required) Form validasyonu
Validators.email Email validasyonu Validators.email new FormControl('', Validators.email) Email alanları
formGroup FormGroup bağlama [formGroup]="form" <form [formGroup]="form"> Reactive Forms
formControlName Kontrol adını atar formControlName="kontrol" <input formControlName="email"> Reactive Forms
ngSubmit Form gönderim olayı (ngSubmit)="metod()" <form (ngSubmit)="gonder()"> Form submit
FormBuilder Form kolay oluşturucu this.fb.group({...}) this.fb.group({isim: ['']}) Reactive Forms
valueChanges Değer değişimlerini dinler control.valueChanges.subscribe() this.form.valueChanges.subscribe(console.log) Reactive Forms

📊 Complete Angular Properties Reference

Property Values Default Description Angular Support
updateOn 'change','blur','submit' 'change' Kontrolün güncellenme zamanı v14+
disabled true,false false Kontrolü devre dışı bırakır v2+
value any '' Kontrolün değeri v2+
valid boolean false Kontrolün geçerli olup olmadığını gösterir v2+
invalid boolean false Kontrolün geçersiz olup olmadığını gösterir v2+
touched boolean false Kullanıcı tarafından dokunuldu mu v2+
dirty boolean false Değer değişti mi v2+
pristine boolean true Değer değiştirilmedi mi v2+
pending boolean false Asenkron validasyon devam ediyor mu v4+
errors object null Validasyon hataları v2+
status 'VALID','INVALID','PENDING','DISABLED' 'VALID' Kontrol durumu v2+
path string[] [] Form içindeki yol v2+

Formlara giriş, Angular’da kullanıcı etkileşimini yönetmenin temel yoludur. Formlar sayesinde veri yönetimi, validasyon ve bileşenler arası veri paylaşımı sağlanabilir. Öğrenciler, temel ve ileri düzey örneklerle form oluşturma, validasyon ve veri akışı yönetimini öğrenirler.
Bir sonraki adım olarak Reactive Forms ileri düzey konuları, dinamik form oluşturma ve özel validasyonlar üzerinde çalışmak önerilir. Ayrıca bileşenler arası veri paylaşımı ve performans optimizasyonu konuları ile formların profesyonel uygulamalara entegrasyonu öğrenilebilir.

🧠 Bilginizi Test Edin

Başlamaya Hazır

Bilginizi Test Edin

Bu interaktif sınavla kendini test et ve konuyu ne kadar iyi anladığını gör

4
Sorular
🎯
70%
Geçmek İçin
♾️
Süre
🔄
Deneme

📝 Talimatlar

  • Her soruyu dikkatle okuyun
  • Her soru için en iyi cevabı seçin
  • Quiz'i istediğiniz kadar tekrar alabilirsiniz
  • İlerlemeniz üstte gösterilecek