Artık sinyal oluşturmayı ve güncellemeyi öğrendiğinize göre, hesaplanmış (computed) sinyalleri öğrenelim. Hesaplanmış sinyaller, bağımlılıkları değiştiğinde otomatik olarak güncellenen türetilmiş değerlerdir. Diğer sinyallere dayalı reaktif hesaplamalar oluşturmak için mükemmeldirler.
Bu aktivitede, bağımlı sinyaller değiştiğinde otomatik olarak güncellenen türetilmiş durum oluşturmak için computed() fonksiyonunu nasıl kullanacağınızı öğreneceksiniz.
Kullanıcı durum sinyalimizden bilgi türeten hesaplanmış değerler ekleyerek kullanıcı durum sistemimizi geliştirelim. Başlangıç kodu artık üç durum seçeneği içeriyor: 'online', 'away' ve 'offline'.
-
computed fonksiyonunu içe aktarın
Mevcut içe aktarmalarınıza
computedekleyin.// Add computed to existing imports import {Component, signal, computed, ChangeDetectionStrategy} from '@angular/core'; -
Bildirimler için bir computed sinyal oluşturun
Kullanıcı durumuna göre bildirimlerin etkinleştirilip etkinleştirilmeyeceğini belirleyen bir hesaplanmış sinyal ekleyin.
notificationsEnabled = computed(() => this.userStatus() === 'online');Bu hesaplanmış sinyal,
userStatussinyali her değiştiğinde otomatik olarak yeniden hesaplanacaktır. Sinyalin değerini okumak için hesaplanmış fonksiyonun içindethis.userStatus()çağrısını nasıl yaptığımıza dikkat edin. -
Açıklayıcı bir mesaj için computed sinyal oluşturun
Kullanıcı durumuna göre açıklayıcı bir mesaj oluşturan bir hesaplanmış sinyal ekleyin.
statusMessage = computed(() => { const status = this.userStatus(); switch (status) { case 'online': return 'Available for meetings and messages'; case 'away': return 'Temporarily away, will respond soon'; case 'offline': return 'Not available, check back later'; default: return 'Status unknown'; } });Bu, hesaplanmış sinyallerin switch ifadeleri ve dize dönüşümleriyle daha karmaşık mantığı nasıl işleyebileceğini gösterir.
-
Çalışma saatleri müsaitliğini hesaplayan bir computed sinyal oluşturun
Kullanıcının çalışma saatleri içinde olup olmadığını hesaplayan bir hesaplanmış sinyal ekleyin.
isWithinWorkingHours = computed(() => { const now = new Date(); const hour = now.getHours(); const isWeekday = now.getDay() > 0 && now.getDay() < 6; return isWeekday && hour >= 9 && hour < 17 && this.userStatus() !== 'offline'; });Bu, hesaplanmış sinyallerin nasıl hesaplamalar yapabildiğini ve birden fazla veri kaynağını birleştirebildiğini gösterir.
userStatusdeğiştiğinde değer otomatik olarak güncellenir. -
Computed değerleri şablonda görüntüleyin
Şablonda zaten "Loading..." gösteren yer tutucular var. Bunları hesaplanmış sinyallerinizle değiştirin:
Bildirimler için,
Loading...yerine bir@ifbloğu koyun:@if (notificationsEnabled()) { Enabled } @else { Disabled }Mesaj için,
Loading...yerine şunu koyun:{{ statusMessage() }}Çalışma saatleri için,
Loading...yerine bir@ifbloğu koyun:@if (isWithinWorkingHours()) { Yes } @else { No }
Hesaplanmış sinyallerin normal sinyaller gibi - parantezlerle - çağrıldığına dikkat edin!
Mükemmel! Artık hesaplanmış sinyaller oluşturmayı öğrendiniz.
Hatırlanması gereken bazı önemli noktalar:
- Hesaplanmış sinyaller reaktiftir: Bağımlılıkları değiştiğinde otomatik olarak güncellenir
- Salt okunurdur: Hesaplanmış değerleri doğrudan ayarlayamazsınız, diğer sinyallerden türetilirler
- Karmaşık mantık içerebilirler: Hesaplamalar, dönüşümler ve türetilmiş durum için kullanın
- Dinamik duruma dayalı performanslı hesaplamalar yapmanın bir yolunu sağlarlar: Angular, yalnızca bağımlılıkları gerçekten değiştiğinde bunları yeniden hesaplar
Bir sonraki derste, linkedSignal ile durum türetmenin farklı bir yolunu öğreneceksiniz!