2017-04-16 3 views
0

In meiner Komponente habe ich eine Liste von Menüpunkten. Eine besteht aus Post von anderen Seiten.Angular 2: Routing mit verschiedenen Arten von Nackteilen

menu.component.ts

selectedPost(postslug){ 
    console.log('post slg ', postslug); 
    this._router.navigate([postslug]); 
} 

selectedPage(pageslug){ 
    console.log('page slg ', pageslug); 
    this._router.navigate([pageslug]); 
} 

app.routing.module.ts

const routes: Routes = [ 
    { 
    path: '', 
    component: PostListComponent, 
    pathMatch: 'full' 
    } 

    , 
    { 
     path: ':postslug', // This is for the posts 
     component: PostSingleComponent, 
    } 
    , 
    { 
    path: ':pageslug', 
    component: PageSingleComponent // This is for the pages 
    } 


]; 

Wie ich wegen benutzerdefinierten slug versteht sich, dass die ich es die richtige Komponente aufzunehmen und laden passieren sollte . Aber es lädt den ersten, der ': + etwas' hat.

Gibt es einen Weg um dies?

Wenn es nicht gibt gibt es eine Möglichkeit, über die Funktion eine benutzerdefinierte Kategorie und im Routing zu der Kategorie umleiten?

Zum Beispiel in der Funktion:

selectedPost(catName, postslug){ 
     console.log('post slg ', postslug); 
     this._router.navigate([catName, postslug]); 
    } 

Und in der Routing hätte ich:

const routes: Routes = [ 
    { 
    path: '', 
    component: PostListComponent, 
    pathMatch: 'full' 
    } 

    , 
    { 
     path: 'catName/:postslug', // This is for the posts 
     component: PostSingleComponent, 
    } 
    , 
    { 
    path: ':pageslug', 
    component: PageSingleComponent // This is for the pages 
    } 


]; 
+2

Versetzen Sie sich in die Schuhe des Routers. Sie werden aufgefordert, zu/1234 zu navigieren. Wie können Sie möglicherweise wissen, ob 1234 ein Post oder eine Seite ist? Wie wäre es mit/posts/1234 und/pages/1234? –

+0

tha'ts, was ich in meinem anderen Beispiel versucht habe, aber auch nicht funktioniert. Da ich nicht weiß, wie man benutzerdefinierte Kategorie auch übergibt. –

+0

Wenn der Wert der Variablen catName entweder 'posts' oder 'pages' ist, benötigen Sie eine Route für den Pfad 'posts /: postslug' und eine weitere für 'pages /: pageslug'. –

Antwort

0

unten versuchen,

const routes: Routes = [ 
    { 
    path: '', 
    component: PostListComponent, 
    pathMatch: 'full' 
    } 

    , 
    { 
     path: 'posts/:postslug', // This is for the posts 
     component: PostSingleComponent, 
    } 
    , 
    { 
    path: 'pages/:pageslug', 
    component: PageSingleComponent // This is for the pages 
    } 
]; 

und auf klicken,

selectedPost(postslug){ 
    console.log('post slg ', postslug); 
    this._router.navigate(['posts',postslug]); 
} 

selectedPage(pageslug){ 
    console.log('page slg ', pageslug); 
    this._router.navigate(['pages',pageslug]); 
} 

Überprüfen Sie die Dokumentation auf How Routing works here., es erklärt im Detail über Routing und Navigation.

Hoffe das hilft !!

+0

Danke Madhu, aber wenn ich eckig doc würde ich nicht auf Stack-Overflow fragen. Ich habe erst nach monatelanger Codierung in eckig angefangen, die Dokumentation zu verstehen. Ich werde das in einigen Stunden ausprobieren und Ihnen Feedback geben. Danke nochmal. –

+0

Jeder Doc kann manchmal überwältigend sein, würde ich vorschlagen, Docs noch einen Versuch zu geben und Zeit, eckigen Team und Gemeinschaft hat enorme Arbeit bei der Schaffung dieser für uns, Prost !! –