2017-03-24 3 views
0

私は主なアプリケーションルータと複数の子ルータを持っています。親ルートからナビゲートするときに開く子ルートを指定するオプションがあります。Aurelia Child 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' } 
    ]); 
} 

子供ルーター:

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}); 
    } 
    } 
} 

(アクティベート内navigateToRoute()を使用して)上記のシナリオが動作しない、また私はそれがだと確信しています最良の方法。 IDパラメータを含めると、アプリのメイン画面から学生プロフィール画面に直接移動するオプションはありますか?

+0

これはバグかどうか疑問に思っています。 –

+0

https://github.com/aurelia/router/issues/89とhttps://github.com/aurelia/router/issues/90を参照してください。後者は、パッケージに関連する可能性のある回避策があるようですが、あまりにも掘り下げてはいけません。私は子供のルートがまだロードされていないと思うので、名前を使用して動作しません。 – mgiesa

+1

実際に私は問題を誤解している可能性があります。 Studentsページからリダイレクトするのではなく、ホームページ(デフォルトのランディングページ、student-home)に移動すると機能しますか?また、CanActivateに移動して、ルータ経由でナビゲートする代わりにRedirectToRouteを返すことができます – mgiesa

答えて

1

私は、子供用ルータで名前付きルートを使用することを断念しました。他の誰かが私よりも彼らをよく理解しているなら、私は好奇心が強いでしょう。しかし、私はそれがアプリケーションの任意の部分からのURLルーティングを使用するだけで完全に動作することを発見しました。

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

ありがとう - これは本当に私を助けました。正確に私が必要なもの – user1750537

0

あなたの子供のルートでアクティブを使用する必要はありません。 Aureliaルーターは自動的にあなたの子供のルートに行きます。

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; 
    } 
} 

APIまたはこれまでに何あなたがproviedのparamsをここで行うことができますしたいから学生を取得するには、アクティブアクティブであなたのモジュール内の「学生/プロファイル/概要」 コール(のparams)を取り外します。

+0

しかし...私は 'navigateToRoute'を親の' student-profile'ルートにアクセスするためにどのように使うのですか?または、少なくとも、子ルートがアクティブになったときに子ルートの1つにジャンプすることを許可するパラメータを提供しますか? – LStarky

+0

経路にナビゲートするときに、URLにパラメータを含める場合は、関数内に第2引数として含める必要があります。 'router.navigateToRoute( 'students'、{id:3242})' 'https://yourapp.com/students?id = 3242' のようなURLをあなたの学生のviewModelで扱うことができます。 – JSeligsohn

関連する問題