Angular'da TypeScript Dekoratörleriyle Nasıl Çalışılır
TypeScript dekoratörleri, bir sınıfa, yönteme, erişim aracına, özelliğe veya parametreye eklenebilen özel bir bildirim türüdür. Angular'da dekoratörler, sınıflara meta veri eklemenin bir yolunu sunarak, yeniden kullanılabilir bileşenler, hizmetler ve daha fazlasını oluşturmak için oldukça güçlü hale getirir. Bu kılavuz, kullanımlarını daha iyi anlamanıza yardımcı olacak örnekler sunarak Angular'da TypeScript dekoratörleriyle nasıl çalışacağınızı açıklar.
TypeScript Dekoratörleri Nelerdir?
Dekoratörler, bir sınıfın veya sınıf üyesinin davranışını değiştiren işlevlerdir. Angular'da dekoratörler, bileşenleri, yönergeleri, boruları ve enjekte edilebilir hizmetleri tanımlamak için kullanılır. Sınıfa meta verileri uygulamak için beyanlı bir yol sağlarlar ve Angular bunu çeşitli amaçlar için kullanır, örneğin bileşenlerin örneklerini oluşturma veya bağımlılıkları enjekte etme.
Yaygın Açısal Dekoratörler
Angular'ın farklı amaçlar için kullanılan birçok yerleşik dekoratörü vardır. Aşağıda en yaygın Angular dekoratörleri verilmiştir:
- @Component - Bir Angular bileşenini tanımlar.
- @Directive - Bir Angular yönergesi tanımlar.
- @Pipe - Angular boruyu tanımlar.
- @Injectable - Diğer bileşenlere veya hizmetlere enjekte edilebilen bir hizmeti tanımlar.
- @Input - Bir özelliği, veri bağlayıcı bir girdi haline getirmek için dekore eder.
- @Output - Bir özelliği olay bağlayıcı bir çıktı haline getirmek için dekore eder.
@Component Dekoratörünü Kullanma
@Component
dekoratörü bir Angular bileşenini tanımlamak için kullanılır. Seçici, şablon, stiller ve diğer yapılandırmalar gibi bileşen hakkında meta veriler sağlar.
import { Component } from '@angular/core';
@Component({
selector: 'app-hello-world',
template: `<h1>Hello, World!</h1>`,
styles: ['h1 { color: blue; }']
})
export class HelloWorldComponent { }
Bu örnekte, @Component
dekoratörü, "Merhaba Dünya!"yı görüntüleyen bir şablona sahip basit bir bileşeni tanımlar. selector
, bu bileşen için kullanılacak özel HTML etiketini belirtir.
@Injectable Dekoratörünü Kullanma
@Injectable
dekoratörü, diğer bileşenlere veya hizmetlere enjekte edilebilecek bir servis sınıfını tanımlamak için kullanılır. Angular'ın bağımlılık enjeksiyon sisteminin önemli bir parçasıdır.
import { Injectable } from '@angular/core';
@Injectable({
providedIn: 'root'
})
export class DataService {
getData() {
return ['Angular', 'TypeScript', 'Decorators'];
}
}
Burada, @Injectable
dekoratörü, DataService
öğesini uygulama genelinde bağımlılık enjeksiyonu için kullanılabilir hale getirir.
@Input ve @Output Dekoratörlerini Kullanma
@Input
ve @Output
dekoratörleri, Angular bileşenlerinde giriş özellikleri ve çıkış olayları oluşturmak için kullanılır. Genellikle bileşen iletişimi için kullanılırlar.
import { Component, Input, Output, EventEmitter } from '@angular/core';
@Component({
selector: 'app-child',
template: `
<p>{{ message }}</p>
<button (click)="sendMessage()">Send Message</button>
`
})
export class ChildComponent {
@Input() message: string;
@Output() messageEvent = new EventEmitter();
sendMessage() {
this.messageEvent.emit('Hello from Child Component!');
}
}
Bu örnekte, @Input
dekoratörü, bir üst bileşenden bir alt bileşene veri geçirmek için kullanılır. @Output
dekoratörü, bir olay aracılığıyla alt bileşenden üst bileşene veri göndermek için kullanılır.
Özel Dekoratörler Oluşturma
Angular'da sınıflara, yöntemlere veya özelliklere belirli davranış veya meta veri eklemek için özel dekoratörler oluşturulabilir. Aşağıda basit bir sınıf dekoratörünün bir örneği verilmiştir:
function LogClass(constructor: Function) {
console.log('Class Decorator called:', constructor);
}
@LogClass
class MyService {
constructor() {
console.log('MyService created');
}
}
Burada, LogClass
fonksiyonu, tanımlandığında sınıfı konsola kaydeden özel bir dekoratördür. @LogClass
fonksiyonunu MyService
fonksiyonuna uygulamak, oluşturulması sırasında mesajları kaydeder.
Çözüm
Angular'daki dekoratörler, sınıflara, yöntemlere, özelliklere ve parametrelere meta veri ve davranış eklemek için güçlü bir yol sağlar. @Component
, @Injectable
, @Input
ve @Output
gibi yerleşik dekoratörlerin nasıl kullanılacağını anlamak, etkili Angular geliştirme için önemlidir. Ek olarak, bir uygulamada belirli ihtiyaçları karşılamak için özel dekoratörler oluşturulabilir ve bu da geliştirme sürecine esneklik katar.