Artık computed sinyalleri ile durum türetmeyi öğrendiğinize göre, kullanıcı durumunuzu otomatik olarak takip eden notificationsEnabled için bir computed sinyal oluşturdunuz. Peki ya kullanıcılar çevrimiçi olsalar bile bildirimleri manuel olarak devre dışı bırakmak isterlerse? İşte burada bağlantılı sinyaller (linked signals) devreye girer.
Bağlantılı sinyaller, kaynak sinyalleriyle reaktif bir bağlantıyı sürdüren yazılabilir sinyallerdir. Normalde bir hesaplamayı takip eden ancak gerektiğinde geçersiz kılınabilen durumlar oluşturmak için mükemmeldirler.
Bu aktivitede, önceki kullanıcı durum sistemindeki hesaplanmış notificationsEnabled sinyalini yazılabilir bir bağlantılı sinyale dönüştürerek linkedSignal() ile computed() arasındaki farkı öğreneceksiniz.
-
linkedSignal fonksiyonunu içe aktarın
Mevcut içe aktarmalarınıza
linkedSignalekleyin.// Add linkedSignal to existing imports import {Component, signal, computed, linkedSignal, ChangeDetectionStrategy} from '@angular/core'; -
computed ifadesini aynı ifadeyle linkedSignal'e dönüştürün
Hesaplanmış
notificationsEnabledsinyalini, aynı ifadeyi kullanarak bir linkedSignal ile değiştirin:// Previously (from lesson 2): // notificationsEnabled = computed(() => this.userStatus() === 'online'); // Now with linkedSignal - same expression, but writable: notificationsEnabled = linkedSignal(() => this.userStatus() === 'online');İfade aynıdır, ancak linkedSignal yazılabilir bir sinyal oluşturur.
userStatusdeğiştiğinde yine otomatik olarak güncellenecektir, ancak bunu manuel olarak da ayarlayabilirsiniz. -
Bildirimleri manuel olarak değiştirmek için bir metot ekleyin
Bağlantılı sinyallere doğrudan yazılabileceğini gösteren bir metot ekleyin:
toggleNotifications() { // This works with linkedSignal but would error with computed! this.notificationsEnabled.set(!this.notificationsEnabled()); }Temel fark budur: computed sinyaller salt okunurdur, ancak bağlantılı sinyaller reaktif bağlantılarını korurken manuel olarak güncellenebilir.
-
Manuel bildirim kontrolü eklemek için şablonu güncelleyin
Bildirimler için bir geçiş düğmesi eklemek üzere şablonunuzu güncelleyin:
<div class="status-info"> <div class="notifications"> <strong>Notifications:</strong> @if (notificationsEnabled()) { Enabled } @else { Disabled } <button (click)="toggleNotifications()" class="override-btn"> @if (notificationsEnabled()) { Disable } @else { Enable } </button> </div> <!-- existing message and working-hours divs remain --> </div> -
Reaktif davranışı gözlemleyin
Şimdi davranışı test edin:
- Kullanıcı durumunu değiştirin -
notificationsEnabledsinyalinin otomatik olarak güncellendiğine dikkat edin - Bildirimleri manuel olarak değiştirin - hesaplanmış değeri geçersiz kılar
- Durumu tekrar değiştirin - bağlantılı sinyal hesaplamasıyla yeniden eşleşir
Bu, bağlantılı sinyallerin manuel olarak ayarlandıktan sonra bile reaktif bağlantılarını koruduğunu gösterir!
- Kullanıcı durumunu değiştirin -
Mükemmel! Computed ve bağlantılı sinyaller arasındaki temel farkları öğrendiniz:
- Computed sinyaller: Salt okunur, her zaman diğer sinyallerden türetilir
- Bağlantılı sinyaller: Yazılabilir, hem türetilebilir HEM DE manuel olarak güncellenebilir
- Computed ne zaman kullanılır: Değer her zaman hesaplanmalıysa
- linkedSignal ne zaman kullanılır: Geçersiz kılınabilen bir varsayılan hesaplamaya ihtiyacınız varsa
Bir sonraki derste, sinyallerle asenkron veri yönetmeyi öğreneceksiniz!