2015-12-27 30 views
12

Geçerli yolun yolunu gibi alabiliyorum:/about, /,/news with location.path(). Ancak bunun yerine takma adını nasıl alabilirim ('bir rota tanımındaki' bölüm 'olarak)?Angular2 Geçerli güzergahın takma adı:

{ path: '/about', as: 'About', component: About } 

Mümkün mü?

+0

kullanarak tam yol göreli rotayı alabilirim? –

+3

Çünkü yollar sonunda yerelleştirilir. Ben aslında hangi sayfada – Pietrzm

cevap

2

Sen konumu kullanmamalısınız diğer adını geçmesine RouteData kullanmaktır. Sana yönlendiriciden olarak elde nasıl emin değilim

this.router.currentInstruction.component.routeName 

: Birlikte bileşenin adını elde edebilir, daha

constructor(public router: Router) 

: En bileşeninde

ile yapıcı içinde enjekte yapılandırma. Ama RouterLink yönergesi başlangıç ​​için doğru nokta olmalıdır: https://angular.io/docs/ts/latest/api/router/RouterLink-directive.html

+1

olduğumu kontrol etmek için takma ad kullanmak daha iyi olurdu, ama neden location.path() 'kullanmak değil? –

+1

Karma stratejiniz varsa, location.path çalışmayacaktır. url/#/hakkında 'about' yerine '/' dönecektir –

+0

Yönlendiricinin en yeni yinelemesi 'currentInstruction' içermiyor mu? –

0

olası diğer adların listesini biliyorsanız o zaman router.generate ve route.isActiveRoute bir arada kullanarak geçerli takma adını bulmak mümkündür:

için örneğin, üç adımda bir sihirbaz var. Bir dizide adım takma adları listesi var:

const alias = this.wizardAliases 
    .map(alias => ({ alias, navigationInstruction: this.router.generate([alias]) })) 
    .filter(x => this.router.isRouteActive(x.navigationInstruction)) 
    .map(x => x.alias); 

if (alias.length === 1) { 
    console.log(`alias is ${alias}`); 
} 

Destek:

private wizardAliases = [ 
    'wizardStep1', 
    'wizardStep2', 
    'wizardStep3' 
]; 

Sonra geçerli takma adını belirlemek için aşağıdaki kodu kullanabilirsiniz ben bu işlerin olmadığını görmek için denemedim rota parametreleri ile.

3

NOT: Aşağıdakiler 2.0 beta serisi ile test edilmiştir. RC sürümlerinde, değişiklikleri değiştirerek güncellenmiş bir yönlendirici bileşeni vardır. Eski olan, router-deprecated olarak yeniden adlandırıldı. Bu henüz yeni yönlendiriciye karşı test edilmedi.

Aşağıdakiler, etkin rotanıza bağlı olarak Foo veya Bar yazdıracaktır. > = Angular2 RC.x için

@Component({ 
    selector: 'app', 
    templateUrl: 'app/app.html', 
    directives: [ROUTER_DIRECTIVES] 
}) 
@RouteConfig([ 
    {path:'/', name: 'Foo', component: FooComponent, useAsDefault: true}, 
    {path:'/bar', name: 'Bar', component: BarComponent, useAsDefault: false}, 
]) 
export class AppComponent implements OnInit { 
    constructor(private _router: Router) { 
    } 

    ngOnInit() { 
     console.log('current route name', 
        this._router.currentInstruction.component.routeName); 
    } 
} 
+1

Bir alt bileşen içinde bulunduğunuzda, bilmek istediğiniz köke bağlı olarak this._router.root.currentInstruction.component.routeName (not _root_) öğesini kullanabilirsiniz. – ZoolWay

1

(yeni yönlendirici)

yeni yönlendirici içinde artık hiçbir takma adlar vardır.

yerel bileşeni

routerOnActivate(curr:RouteSegment, prev?:RouteSegment, currTree?:RouteTree, prevTree?:RouteTree):void { 
    console.log(curr.stringifiedUrlSegments); 
    } 

veya diğer adı almak istiyorum neden

constructor(private router:Router) {} 

    routerOnActivate(curr:RouteSegment, prev?:RouteSegment, currTree?:RouteTree, prevTree?:RouteTree):void { 
    console.log(this.router.serializeUrl(tree)); 
    } 

veya

constructor(router:Router, private location:Location) { 
    router.changes.subscribe(() => { 
    console.log(this.location.path()); 
    }); 
} 
+0

Ayrıca bkz. Http://stackoverflow.com/questions/37183874/get-the-path-or-the-name-of-the-routes-in-angular-2/37207316#37207316 –

İlgili konular