Angular İletişim Formu Entegrasyonu (Standalone & Signals)
Modern Angular 17/18+ projelerinizi Standalone Bileşenler, reaktif Signals ve HttpClient kullanarak Lugatu form altyapısına bağlayın; SMTP yapılandırması olmadan güvenilir teslimat sağlayın.
1. Reaktif Signals Kullanan Standalone İletişim Bileşeni
Modern Angular projelerinde NgModules yerine Standalone Bileşenler ve Signals mimarisi tercih edilir. Bu örnek form, reaktif durum yönetimi ile Lugatu genel form endpoint’ine doğrudan veri gönderir.
import { Component, signal, inject } from '@angular/core';
import { CommonModule } from '@angular/common';
import { FormsModule } from '@angular/forms';
import { HttpClient } from '@angular/common/http';
@Component({
selector: 'app-contact-form',
standalone: true,
imports: [CommonModule, FormsModule],
template: `
<form (ngSubmit)="onSubmit()" class="space-y-4 max-w-md">
<div>
<label for="name" class="block text-sm font-semibold mb-1">Ad Soyad</label>
<input id="name" type="text" [(ngModel)]="name" name="name" required class="w-full border rounded-xl p-2.5" />
</div>
<div>
<label for="email" class="block text-sm font-semibold mb-1">E-posta Adresi</label>
<input id="email" type="email" [(ngModel)]="email" name="email" required class="w-full border rounded-xl p-2.5" />
</div>
<div>
<label for="message" class="block text-sm font-semibold mb-1">Mesajınız</label>
<textarea id="message" rows="4" [(ngModel)]="message" name="message" required class="w-full border rounded-xl p-2.5"></textarea>
</div>
<!-- Honeypot spam tuzağı -->
<input type="text" [(ngModel)]="gotcha" name="_gotcha" style="display:none !important" tabindex="-1" autocomplete="off" />
<button type="submit" [disabled]="isSubmitting()" class="btn-primary-editorial py-2.5 px-6">
{{ isSubmitting() ? 'Gönderiliyor...' : 'Mesajı Gönder' }}
</button>
<p *ngIf="isSuccess()" class="text-sm text-green-700 font-medium">Teşekkürler! Mesajınız başarıyla iletildi.</p>
<p *ngIf="errorMessage()" class="text-sm text-red-600">{{ errorMessage() }}</p>
</form>
`,
})
export class ContactFormComponent {
private http = inject(HttpClient);
name = signal('');
email = signal('');
message = signal('');
gotcha = signal('');
isSubmitting = signal(false);
isSuccess = signal(false);
errorMessage = signal('');
onSubmit() {
if (this.gotcha()) return; // Bot gönderimlerini sessizce engelle
this.isSubmitting.set(true);
this.errorMessage.set('');
const payload = {
fields: {
name: this.name(),
email: this.email(),
message: this.message(),
},
honeypot: this.gotcha(),
};
this.http.post('https://www.lugatu.com/api/v1/public/forms/YOUR_PUBLIC_FORM_ID/submissions', payload)
.subscribe({
next: () => {
this.isSubmitting.set(false);
this.isSuccess.set(true);
this.name.set('');
this.email.set('');
this.message.set('');
},
error: () => {
this.isSubmitting.set(false);
this.errorMessage.set('Gönderim sırasında hata oluştu. Lütfen tekrar deneyin.');
},
});
}
}
2. SSR ve Sunucu Tarafı API Yönlendirmesi
Angular projeniz SSR modunda çalışıyorsa, sunucu API anahtarınızı (lug_live_...) tarayıcıya sızdırmadan Express / Node rotası üzerinden sunucudan sunucuya yönlendirme yapabilirsiniz.
server.post('/api/contact', async (req, res) => {
const { name, email, message, _gotcha } = req.body;
if (_gotcha) return res.status(200).json({ ok: true });
try {
const response = await fetch(`https://www.lugatu.com/api/v1/forms/${process.env.LUGATU_FORM_ID}/submissions`, {
method: 'POST',
headers: {
'Authorization': `Bearer ${process.env.LUGATU_API_KEY}`,
'Content-Type': 'application/json',
'Idempotency-Key': crypto.randomUUID(),
},
body: JSON.stringify({ fields: { name, email, message } }),
});
res.status(response.status).json({ ok: response.ok });
} catch (error) {
res.status(500).json({ error: 'İletim başarısız' });
}
});
3. Bot Koruması ve Honeypot Ayarları
Lugatu gizli _gotcha alanını otomatik analiz eder. Alanı display:none ve tabindex="-1" ile gizleyerek otomatik form dolduran botları engelleyebilirsiniz.
Honeypot alanlarına label vermeyin ve autocomplete niteliğini kapalı tutun.
Güvenlik ve Kimlik Doğrulama Standardı
Güvenlik Kuralı: Sunucudan sunucuya API anahtarları (lug_live_...) Angular environment dosyalarına veya derlenmiş JS bundle’larına asla dahil edilmemelidir. Doğrudan tarayıcı gönderimleri için genel form endpoint’ini kullanın.
Sorun Giderme ve Yaygın Hatalar
Genel form endpoint’i tüm tarayıcılardan gelen isteklere izin verir. Eğer yanlışlıkla sunucudan sunucuya endpoint’ini çağırdıysanız genel form endpoint’ine (/api/v1/public/forms/...) geçin.
Sıkça Sorulan Sorular
Lugatu Angular Universal ve SSR ile uyumlu mu?
Evet. İletişim formları kullanıcı etkileşimi sonrası çalıştığı için Angular SSR ve hidrasyon mimarisiyle tam uyumludur.
Kendi formunuzu oluşturmaya hazır mısınız?
Saniyeler içinde ücretsiz başlayın. Kredi kartı gerektirmez.