2017-03-24 8 views
0

Ich habe einen Haupt-App-Router und mehrere Kind-Router. Ich möchte die Option haben, die untergeordnete Route anzugeben, die beim Navigieren von der übergeordneten Route geöffnet werden soll.Aurelia Child Router Redirect auf bestimmte Route

Eltern Router:

configureRouter(config, router) { 
    this.router = router; 
    config.map([ 
    { route: ['','home'],  name: 'home',   moduleId: 'home/home' }, 
    { route: 'students/:id?', name: 'students',  moduleId: 'students/students' }, 
    { route: 'staff',   name: 'staff',  moduleId: 'staff/staff' } 
    ]); 
} 

Kinder Router für Studenten:

export class Students { 

    configureRouter(config, router) { 
    config.map([ 
     { route: ['', 'home'], name: 'student-home',   moduleId: 'students/students-home' }, 
     { route: 'list',   name: 'student-list',   moduleId: 'students/student-list' }, 
     { route: 'profile/:id', name: 'student-profile',  moduleId: 'students/profile/overview' }, 
     { route: 'lockers',  name: 'student-lockers',  moduleId: 'students/lockers/home' } 
    ]); 
    this.router = router; 
    } 

    activate(params) { 
    if (params.id) { 
     console.log("Going straight to a student record for: ", params); 
     this.router.navigateToRoute('student-profile', {id: params.id}); 
    } 
    } 
} 

Das obige Szenario (navigateToRoute() innerhalb activate verwenden) nicht funktioniert, noch bin ich sicher, dass es das ist bester Weg. Wie kann ich direkt vom Haupt-App-Router zum Student-Profil-Bildschirm navigieren, wenn ich einen ID-Parameter einschließe?

+0

hmm, ich frage mich, ob das ein Fehler ist. –

+0

Siehe https://github.com/aurelia/router/issues/89 und https://github.com/aurelia/router/issues/90, letzteres hört sich an, als gäbe es eine mögliche Arbeit mit einem Paket, aber ich habe es nicht getan nicht zu viel hineingraben. Ich denke, dass die Kinderrouten noch nicht geladen sind, weshalb die Verwendung des Namens nicht funktioniert – mgiesa

+1

Eigentlich habe ich das Problem vielleicht falsch verstanden. Anstatt das von der Student-Seite umzuleiten, funktioniert das, wenn Sie das auf die Homepage (die Standard-Landing Page, Student-Home) verschieben? Sie könnten es auch in CanActivate verschieben und eine RedirectToRoute zurückgeben, anstatt über den Router zu navigieren. – mgiesa

Antwort

1

Ich habe aufgegeben, benannte Routen mit untergeordneten Routern zu verwenden. Wenn jemand anderes sie besser versteht als ich, wäre ich neugierig. Ich habe jedoch festgestellt, dass es perfekt funktioniert, um das URL-Routing von jedem Teil der App aus zu verwenden.

this.router.navigate('#/students/profile/' + record.id); 
+1

Danke - das hat mir wirklich geholfen. Genau das, was ich brauchte – user1750537

0

Sie müssen nicht aktiv in Ihrem Kind Route verwenden. Aurelia Router wird automatisch auf Ihre Kinderroute gehen.

export class Students { 

    configureRouter(config, router) { 
    config.map([ 
     { route: ['', 'home'], name: 'student-home',   moduleId: 'students/students-home' }, 
     { route: 'list',   name: 'student-list',   moduleId: 'students/student-list' }, 
     { route: 'profile/:id', name: 'student-profile',  moduleId: 'students/profile/overview' }, 
     { route: 'lockers',  name: 'student-lockers',  moduleId: 'students/lockers/home' } 
    ]); 
    this.router = router; 
    } 
} 

aktiv entfernen und in das Modul „Studenten/profile/Übersicht“ Anruf aktiv (params) zu erhalten Schüler von api oder was auch immer Sie können mit provied params hier tun.

+0

Aber ... wie würde ich 'navigateToRoute' vom Elternteil verwenden, um auf die 'Student-Profil'-Route des Kindes zuzugreifen? Oder zumindest einen Parameter bereitstellen, der es dem Kind ermöglicht, zu einer der untergeordneten Routen zu springen, wenn es aktiviert wird? – LStarky

+0

Wenn Sie zu einer Route navigieren, wenn Sie einen Parameter in die URL aufnehmen möchten, fügen Sie ihn als zweites Argument in die Funktion ein: 'router.navigateToRoute ('students', {id: 3242})' Dies führt zu eine URL wie 'https: //yourapp.com/students? id = 3242' die Sie dann in Ihrem Studenten ViewModel behandeln können, wie Sie möchten. – JSeligsohn

Verwandte Themen