2016-06-18 19 views
5

Rota değiştiğinde benim app.componentimde geçerli rota adını veya rota yolunu bulmaya çalışıyorum. Rota adını, bir sarmalayıcı divunun etrafında sayfa sınıfı olarak kullanabilirim. Bunu halletmenin en iyi yolunu bulmaya çalışıyorum. Önceden aşağıda listelediğim gibi yöneltici değişiklikleri özelliğine abone olmuştum, ancak artık @ açısal/yönlendirici 3.0.0-alpha.3 ile artık mevcut değil gibi görünüyor. Herhangi bir düşünce ya da öneri varsa, ben çok minnettar olurdum. https://angular.io/docs/ts/latest/guide/router.htmlAngular2 @ açısal/yönlendirici 3.0.0-alpha.3 - Rota değiştiğinde rota adı ya da yolu nasıl alınır

+0

Bu yönelticide (yalnızca yol) –

+0

yol güzergahı bulunmuyorsa, rota değişikliklerinin her değişmesi durumunda yönlendirici yolunu bulabilirsem. – orion583

+0

Aynı sorunu yaşıyor. Eğer bir çözüm bulursanız, bunu postalayabilir misiniz? –

cevap

0

Bu muhtemelen yardımcı olacağını,

import { CanActivate, Router, RouterStateSnapshot } from '@angular/router'; 

@Component({ 
    selector: 'my-component', 
    templateUrl: 'my-component.html' 
}) 
export class MyComponent implements CanActivate { 
    constructor(private router: Router) {} 

    canActivate(state: RouterStateSnapshot) { 
    // this is the future route you are intended to visit 
    console.log(state.url); 
    } 
} 

Daha fazla detay şu anda belgelenmiş bir, ama ilk zaman I hariç ActivatedRoute benim için ateş değil üzerinde gözlemlenebilir url'dir taban url'ye (ex: indeks/indeks/indeks/item eserlerinden gidiyor, ama/index/item/index/item/2, index/dashboard'a gidiyor, hatta indeks/index yapmıyor).

aşağıdaki çözüm en iyi yöntem olup olmadığından emin değilim ne de performans etkileri nelerdir, ama aşağıdaki yönlendirici NavigationEnd olaya aktif rotayı elde edebilir:

import { Component, OnInit, OnDestroy } from '@angular/core'; 
import { ROUTER_DIRECTIVES, Router, NavigationEnd } from '@angular/router'; 

@Component({ 
    selector: 'navbar', 
    directives: [ROUTER_DIRECTIVES], 
    template: ` 
       ... 
       `  
}) 

export class NavBarComponent implements OnInit, OnDestroy { 
    private sub: any; 

    constructor(private router: Router) { 
    } 

    ngOnInit() { 
     this.sub = this.router.events.subscribe(e => { 
      if (e instanceof NavigationEnd) { 
       console.log(e.url); 
      } 
     }); 
    } 


    ngOnDestroy() { 
     this.sub.unsubscribe(); 
    } 
} 

Bu, url ağacında ne kadar derin olduğuna veya nereye gidip geldiğine bakılmaksızın, rotayı her değiştirdiğinizde patlar.

+0

OnActivate arayüzü artık v3 yönlendiricisiyle birlikte çalışmıyor, bu yüzden çalışacağını düşünmüyorum. Ve bu arada, RouteSegment sınıfı da. – Maxime

+0

@Maxime doğru, hem RouteSegment hem de OnActive artık v3'te mevcut değil. Bunları dahil etmeye çalıştığımda aşağıdaki hataları alıyorum. @ açısal/yönlendirici/dizin "'hiçbir dışa aktarma yok' RouteSegment '. @ açısal/yönlendirici/dizin"' hiçbir dışa aktarma yok 'OnActivate' – orion583

+0

Aynı sorun, RouteSegment gitti. Şimdi ne kullanmalıyız ??? Bu büyük "RC" değişikliklerinden nefret ediyorum. –

6

Steve'in cevaba

this.router.changes.subscribe((val) => { 
    var path = this._location.path(); 
    if (path.indexOf('page-name') !== -1) { 
    this.pageClass = 'page-name'; 
    } 
}) 
+0

+1: Benzer bir sorunla karşılaştım. Uygulamanın içinde gezinirken 'ActivatedRoute' gözlenebilir değildir. Ancak 'RouterLinkActive' yönergesi, geçerli rotaya göre bağlantı sınıflarını doğru bir şekilde değiştirdi. 'RouterLinkActive', bu cevapta olduğu gibi aynı yaklaşımı kullanır:' NavigationEnd' olayını dinlemek. – Biggie