SSS (FAQ)
Angular’da SSS (Sıkça Sorulan Sorular) bileşeni, kullanıcıların yaygın sorulara hızlı erişimini sağlamak ve uygulama deneyimini geliştirmek amacıyla kullanılan bir yapı taşını temsil eder. SSS bileşenleri, modern web uygulamaları ve SPA’larda (Single Page Applications) kullanıcı etkileşimini kolaylaştırırken, geliştiricilere bileşen tabanlı düşünce, durum yönetimi, veri akışı ve yaşam döngüsü yönetimi konularında pratik deneyim sağlar.
SSS bileşenleri, tekrar kullanılabilir ve ölçeklenebilir yapılar oluşturmak için ideal bir örnektir. Angular’da SSS tasarlarken, prop drilling (özellikleri gereksiz yere alt bileşenlere iletme), gereksiz yeniden render işlemleri ve doğrudan durum değişiklikleri gibi yaygın hatalardan kaçınmak önemlidir. Bu içerikte, okuyucu temel bir SSS bileşeni oluşturmayı, gelişmiş veri yönetimi ve asenkron işlemlerle zenginleştirilmiş pratik örnekleri, hata yönetimi ve performans optimizasyon tekniklerini öğrenecektir.
Ayrıca, SSS bileşenleri Angular’ın ngFor ve ngIf gibi yapısal direktiflerini, olay ve özellik bağlamalarını, servis ve Observable tabanlı veri akışını anlamak için mükemmel bir örnek sunar. Bu bilgiler, proje ölçeğine uygun, güvenli ve sürdürülebilir bileşenler geliştirmek için kritik öneme sahiptir.
Temel Örnek
typescriptimport { Component } from '@angular/core';
@Component({
selector: 'app-faq',
template: ` <div *ngFor="let item of faqs; let i = index" class="faq-item"> <h3 (click)="toggle(i)">{{ item.question }}</h3> <p *ngIf="item.open">{{ item.answer }}</p> </div>
`,
styles: [`
.faq-item { margin-bottom: 1rem; cursor: pointer; }
h3 { font-weight: bold; }
`]
})
export class FaqComponent {
faqs = [
{ question: 'Angular nedir?', answer: 'Angular, modern web uygulamaları geliştirmek için bir framework'tür.', open: false },
{ question: 'Veri yönetimi nasıl yapılır?', answer: 'Servisler ve RxJS kullanarak veri akışını kontrol edebilirsiniz.', open: false }
];
toggle(index: number) {
this.faqs[index].open = !this.faqs[index].open;
}
}
Yukarıdaki örnekte @Component dekoratörü ile selector, template ve stil tanımlamaları yapılmıştır. ngFor direktifi ile SSS öğeleri dinamik olarak oluşturulur ve (click) olay bağlaması ile toggle() metodu çağrılır. ngIf direktifi ile cevaplar yalnızca açık durumdayken render edilir, bu sayede gereksiz DOM işlemleri önlenir.
Bu yapı, durumu bileşen içinde yöneterek prop drilling’i önler ve bileşenin yeniden kullanılabilirliğini artırır. *ngIf kullanımı performansı optimize ederken, template ve logic ayrımı, bileşenin bakımını ve ölçeklenebilirliğini kolaylaştırır. Bu örnek, gerçek Angular projelerinde SSS bileşenlerinin verimli ve doğru şekilde nasıl tasarlanacağını göstermektedir.
Pratik Örnek
typescriptimport { Component, OnInit } from '@angular/core';
import { FaqService } from './faq.service';
@Component({
selector: 'app-faq-advanced',
template: ` <div *ngFor="let item of faqs; let i = index" class="faq-item"> <h3 (click)="toggle(i)">{{ item.question }}</h3> <p *ngIf="item.open">{{ item.answer }}</p> </div>
`,
styles: [`
.faq-item { margin-bottom: 1rem; cursor: pointer; }
h3 { font-weight: bold; }
`]
})
export class FaqAdvancedComponent implements OnInit {
faqs: any[] = [];
constructor(private faqService: FaqService) {}
ngOnInit() {
this.faqService.getFaqs().subscribe(data => {
this.faqs = data.map(item => ({ ...item, open: false }));
});
}
toggle(index: number) {
this.faqs[index].open = !this.faqs[index].open;
}
}
Advanced Angular Implementation
typescriptimport { Component, OnInit, ChangeDetectionStrategy } from '@angular/core';
import { FaqService } from './faq.service';
import { Observable } from 'rxjs';
import { map } from 'rxjs/operators';
@Component({
selector: 'app-faq-optimized',
templateUrl: './faq-optimized.component.html',
styleUrls: ['./faq-optimized.component.css'],
changeDetection: ChangeDetectionStrategy.OnPush
})
export class FaqOptimizedComponent implements OnInit {
faqs$: Observable<any[]> = this.faqService.getFaqs().pipe(
map(faqs => faqs.map(item => ({ ...item, open: false })))
);
constructor(private faqService: FaqService) {}
ngOnInit() {}
toggle(item: any) {
item.open = !item.open;
}
}
Angular’da SSS (FAQ) bileşenlerini geliştirirken, bileşen tabanlı yapı, durum yönetimi, veri akışı ve performans optimizasyonu önceliklidir. OnPush ChangeDetection stratejisi kullanarak gereksiz render işlemlerinden kaçınılabilir. Servisler ve Observable’lar, veri akışını ve hata yönetimini merkezi bir şekilde kontrol etmeyi sağlar. Prop drilling’den kaçınmak, bileşenlerin tekrar kullanılabilirliğini artırır. Güvenlik ve performans önlemleri, uygulamanın ölçeklenebilir ve sürdürülebilir olmasını garanti eder.
📊 Kapsamlı Referans
| Angular Element/Method | Description | Syntax | Example | Notes |
|---|---|---|---|---|
| Component | Bileşen tanımlar | @Component({...}) | @Component({selector:'app', template:'', styles:[]}) | Angular’ın temel yapı taşı |
| ngFor | Array üzerinde döngü | *ngFor="let item of items" | <div *ngFor="let i of items">{{i}}</div> | Dinamik liste oluşturur |
| ngIf | Koşullu render | *ngIf="condition" | <p *ngIf="show">Metin</p> | Gereksiz render’ı engeller |
| Event Binding | Olay bağlama | (click)="method()" | <button (click)="toggle()">Tıkla</button> | Kullanıcı etkileşimi |
| Property Binding | Özellik bağlama | [property]="value" | <img [src]="imgUrl"> | Alt bileşene veri aktarımı |
| Service | Veri yönetimi | constructor(private svc: Service){} | Servis ile veri kullanımı | Yeniden kullanılabilir |
| Observable | Reaktif veri | import {Observable} from 'rxjs' | data$: Observable<any[]> | Asenkron veri yönetimi |
| ngOnInit | Yaşam döngüsü hook | ngOnInit(){} | ngOnInit() { ... } | Bileşen başlatma |
| ChangeDetectionStrategy | Performans optimizasyonu | changeDetection: ChangeDetectionStrategy.OnPush | @Component({..., changeDetection: ChangeDetectionStrategy.OnPush}) | Render kontrolü |
| ... | ... | ... | ... | ... |
📊 Complete Angular Properties Reference
| Property | Values | Default | Description | Angular Support |
|---|---|---|---|---|
| selector | string | required | Bileşen seçici adı | Angular 2+ |
| template | string | '' | Bileşen HTML şablonu | Angular 2+ |
| styles | array | [] | Bileşen CSS stilleri | Angular 2+ |
| changeDetection | OnPush/Default | Default | Değişiklik tespit stratejisi | Angular 2+ |
| providers | array | [] | Bileşen servisleri | Angular 2+ |
| inputs | array | [] | Girdi özellikleri | Angular 2+ |
| outputs | array | [] | Çıkış olayları | Angular 2+ |
| encapsulation | Emulated/None/ShadowDom | Emulated | CSS kapsülleme | Angular 2+ |
| animations | array | [] | Animasyon tanımlamaları | Angular 4+ |
| viewProviders | array | [] | Sadece görünüm için servisler | Angular 2+ |
| host | object | {} | Host bağlamaları | Angular 2+ |
SSS (FAQ) bileşenlerini öğrenmek, Angular’da bileşen tabanlı mimari, durum yönetimi, veri akışı ve performans optimizasyonu konularında temel beceriler kazandırır. Bu bilgiler, tekrar kullanılabilir ve ölçeklenebilir bileşenler oluşturmayı kolaylaştırır. İleri seviye çalışmalar için NgRx, RxJS kalıpları, yönlendirme ve Lazy Loading konuları önerilir. Angular DevTools gibi araçlarla proje üzerinde pratik yaparak bilgiyi pekiştirmek, projelerde gerçek dünya uygulamalarını geliştirmeyi sağlar.
🧠 Bilginizi Test Edin
Bilginizi Test Edin
Bu interaktif sınavla kendini test et ve konuyu ne kadar iyi anladığını gör
📝 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