Detaylı Rehberler
Yönlendirme

Router Yaşam Döngüsü ve Olaylar

Angular Router, navigasyon değişikliklerine yanıt vermenize ve yönlendirme süreci sırasında özel mantık çalıştırmanıza olanak tanıyan kapsamlı bir yaşam döngüsü kancaları ve olaylar seti sağlar.

Yaygın router olayları

Angular Router, navigasyon yaşam döngüsünü izlemek için abone olabileceğiniz navigasyon olayları yayınlar. Bu olaylar Router.events observable'ı aracılığıyla kullanılabilir. Bu bölüm, navigasyon ve hata izleme için yaygın yönlendirme yaşam döngüsü olaylarını (kronolojik sırayla) kapsar.

Olaylar Açıklama
NavigationStart Navigasyon başladığında gerçekleşir ve istenen URL'yi içerir.
RoutesRecognized Yönlendirici hangi rotanın URL ile eşleştiğini belirledikten sonra gerçekleşir ve rota durum bilgisini içerir.
GuardsCheckStart Rota koruyucu aşamasını başlatır. Yönlendirici canActivate ve canDeactivate gibi rota koruyucularını değerlendirir.
GuardsCheckEnd Koruyucu değerlendirmesinin tamamlandığını bildirir. Sonucu (izin verildi/reddedildi) içerir.
ResolveStart Veri çözümleme aşamasını başlatır. Rota çözücüleri veri çekmeye başlar.
ResolveEnd Veri çözümleme tamamlanır. Tüm gerekli veriler kullanılabilir hale gelir.
NavigationEnd Navigasyon başarıyla tamamlandığında son olay. Yönlendirici URL'yi günceller.
NavigationSkipped Yönlendirici navigasyonu atladığında gerçekleşir (örn. aynı URL navigasyonu).

Yaygın hata olayları şunlardır:

Olay Açıklama
NavigationCancel Yönlendirici navigasyonu iptal ettiğinde gerçekleşir. Genellikle bir koruyucunun false döndürmesinden kaynaklanır.
NavigationError Navigasyon başarısız olduğunda gerçekleşir. Geçersiz rotalar veya çözücü hatalarından kaynaklanabilir.

Tüm yaşam döngüsü olaylarının listesi için bu kılavuzun tam tablosuna göz atın.

Router olaylarına nasıl abone olunur

Belirli navigasyon yaşam döngüsü olayları sırasında kod çalıştırmak istediğinizde, router.events'e abone olarak ve olayın örneğini kontrol ederek bunu yapabilirsiniz:

// Router olaylarına abone olma örneği
import {Component, inject, signal, effect} from '@angular/core';
import {Event, Router, NavigationStart, NavigationEnd} from '@angular/router';

@Component({
  /*...*/
})
export class RouterEvents {
  private readonly router = inject(Router);

  constructor() {
    // Router olaylarına abone ol ve olaylara tepki ver
    this.router.events.pipe(takeUntilDestroyed()).subscribe((event: Event) => {
      if (event instanceof NavigationStart) {
        // Navigasyon başlıyor
        console.log('Navigation starting:', event.url);
      }
      if (event instanceof NavigationEnd) {
        // Navigasyon tamamlandı
        console.log('Navigation completed:', event.url);
      }
    });
  }
}

NOTE: @angular/router'dan gelen Event türü, normal global Event türü ile aynı ada sahiptir, ancak RouterEvent türünden farklıdır.

Yönlendirme olayları nasıl hata ayıklanır

Yönlendirici navigasyon sorunlarını olay dizisi hakkında görünürlük olmadan hata ayıklamak zor olabilir. Angular, tüm yönlendirici olaylarını konsola kaydeden yerleşik bir hata ayıklama özelliği sağlar ve navigasyon akışını anlamanıza ve sorunların nerede oluştuğunu belirlemenize yardımcı olur.

Bir Yönlendirici olay dizisini incelemeniz gerektiğinde, dahili navigasyon olayları için günlüğü etkinleştirebilirsiniz. Bunu, tüm yönlendirme olaylarının ayrıntılı konsol günlüğünü etkinleştiren bir yapılandırma seçeneği (withDebugTracing()) geçirerek yapılandırabilirsiniz.

import {provideRouter, withDebugTracing} from '@angular/router';

const appRoutes: Routes = [];
bootstrapApplication(App, {
  providers: [provideRouter(appRoutes, withDebugTracing())],
});

Daha fazla bilgi için withDebugTracing resmi dokümanlarına göz atın.

Yaygın kullanım durumları

Router olayları, gerçek dünya uygulamalarında birçok pratik özelliği mümkün kılar. Router olaylarıyla kullanılan bazı yaygın kalıplar şunlardır.

Yükleme göstergeleri

Navigasyon sırasında yükleme göstergeleri gösterme:

import {Component, inject} from '@angular/core';
import {Router} from '@angular/router';

@Component({
  selector: 'app-root',
  template: `
    @if (isNavigating()) {
      <div class="loading-bar">Loading...</div>
    }
    <router-outlet />
  `,
})
export class App {
  private router = inject(Router);
  isNavigating = computed(() => !!this.router.currentNavigation());
}

Analitik izleme

Analitik için sayfa görüntülemelerini izleme:

import {takeUntilDestroyed} from '@angular/core/rxjs-interop';
import {inject, DestroyRef, Service} from '@angular/core';
import {Router, NavigationEnd} from '@angular/router';

@Service()
export class AnalyticsService {
  private router = inject(Router);
  private destroyRef = inject(DestroyRef);

  startTracking() {
    this.router.events.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((event) => {
      // URL değiştiğinde sayfa görüntülemelerini izle
      if (event instanceof NavigationEnd) {
        // Sayfa görüntülemesini analitik servisine gönder
        this.analytics.trackPageView(event.url);
      }
    });
  }

  private analytics = {
    trackPageView: (url: string) => {
      console.log('Page view tracked:', url);
    },
  };
}

Hata yönetimi

Navigasyon hatalarını nazikçe yönetme ve kullanıcı geri bildirimi sağlama:

import {Component, inject, signal} from '@angular/core';
import {
  Router,
  NavigationStart,
  NavigationError,
  NavigationCancel,
  NavigationCancellationCode,
} from '@angular/router';
import {takeUntilDestroyed} from '@angular/core/rxjs-interop';

@Component({
  selector: 'app-error-handler',
  template: `
    @if (errorMessage()) {
      <div class="error-banner">
        {{ errorMessage() }}
        <button (click)="dismissError()">Dismiss</button>
      </div>
    }
  `,
})
export class ErrorHandler {
  private router = inject(Router);
  readonly errorMessage = signal('');

  constructor() {
    this.router.events.pipe(takeUntilDestroyed()).subscribe((event) => {
      if (event instanceof NavigationStart) {
        this.errorMessage.set('');
      } else if (event instanceof NavigationError) {
        console.error('Navigation error:', event.error);
        this.errorMessage.set('Failed to load page. Please try again.');
      } else if (event instanceof NavigationCancel) {
        console.warn('Navigation cancelled:', event.reason);
        if (event.code === NavigationCancellationCode.GuardRejected) {
          this.errorMessage.set('Access denied. Please check your permissions.');
        }
      }
    });
  }

  dismissError() {
    this.errorMessage.set('');
  }
}

Tüm router olayları

Referans olarak, Angular'da bulunan tüm router olaylarının tam listesi burada verilmiştir. Bu olaylar kategoriye göre düzenlenmiş ve navigasyon sırasında tipik olarak oluşma sırasına göre listelenmiştir.

Bu olaylar, başlangıçtan rota tanıma, koruyucu kontrolleri ve veri çözümlemeye kadar temel navigasyon sürecini izler. Navigasyon yaşam döngüsünün her aşamasına görünürlük sağlar.

Olay Açıklama
NavigationStart Navigasyon başladığında gerçekleşir
RouteConfigLoadStart Bir rota yapılandırması tembel yüklenmeden önce gerçekleşir
RouteConfigLoadEnd Tembel yüklenen bir rota yapılandırması yüklendikten sonra gerçekleşir
RoutesRecognized Yönlendirici URL'yi ayrıştırıp rotaları tanıdığında gerçekleşir
GuardsCheckStart Koruyucu aşamasının başında gerçekleşir
GuardsCheckEnd Koruyucu aşamasının sonunda gerçekleşir
ResolveStart Çözümleme aşamasının başında gerçekleşir
ResolveEnd Çözümleme aşamasının sonunda gerçekleşir

Activation events

Bu olaylar, rota bileşenlerinin oluşturulup başlatıldığı etkinleştirme aşamasında gerçekleşir. Etkinleştirme olayları, üst ve alt rotalar dahil olmak üzere rota ağacındaki her rota için tetiklenir.

Olay Açıklama
ActivationStart Rota etkinleştirmesinin başında gerçekleşir
ChildActivationStart Alt rota etkinleştirmesinin başında gerçekleşir
ActivationEnd Rota etkinleştirmesinin sonunda gerçekleşir
ChildActivationEnd Alt rota etkinleştirmesinin sonunda gerçekleşir

Bu olaylar, bir navigasyon girişiminin nihai sonucunu temsil eder. Her navigasyon, başarılı olup olmadığını, iptal edilip edilmediğini, başarısız olup olmadığını veya atlanıp atlanmadığını gösteren bu olaylardan tam olarak biriyle sona erer.

Olay Açıklama
NavigationEnd Navigasyon başarıyla sona erdiğinde gerçekleşir
NavigationCancel Yönlendirici navigasyonu iptal ettiğinde gerçekleşir
NavigationError Beklenmeyen bir hata nedeniyle navigasyon başarısız olduğunda gerçekleşir
NavigationSkipped Yönlendirici navigasyonu atladığında gerçekleşir (örn. aynı URL navigasyonu)

Other events

Ana navigasyon yaşam döngüsünün dışında gerçekleşen ancak yönlendiricinin olay sisteminin bir parçası olan ek bir olay daha vardır.

Olay Açıklama
Scroll Kaydırma sırasında gerçekleşir

Next steps

Rota koruyucuları ve yaygın yönlendirici görevleri hakkında daha fazla bilgi edinin.