2017-03-07 16 views
1

私のcreate-teamルートのプロパティが、私のuserServiceの観測可能なプロパティによって設定されています。 しかし私は1つの問題があります。私のプロパティisTeamMemberが変更されたことを反映するためにrouter.navigationアレイをリフレッシュする方法はありません。だから私のisTeamMemberプロパティがtrueを返しても、私は完全なページリフレッシュを行わない限り、ルートは隠されません。ルートプロパティが更新されたときに、Aurelia-router router.navigationが更新されない

私はnav: trueに設定されたルートだけがrouter.navigationアレイに追加されることを理解しているので、router.refreshNavigation()で試してみましたが機能しませんでした。

私は現在、router.navigationアレイを通してループしています。私のアプリのメニューを表示しています。しかし、ユーザーがチームを作成するとき、ユーザーがチームオーナーになっているので、メニューからそのルートを非表示にしたいと考えています。私はAuthorizeStepでそのルートへのアクセスを扱いますが、このルートを動的に隠すこともしたいと思います。

app.ts

configureRouter(config: RouterConfiguration, router: Router){ 
... 
    var appRoutes = [ 
     { route: '/create-team', name:'create-team', moduleId: 'routes/create-team', nav: !this.userService.isTeamMember, title: 'menu.create-team', settings: { auth: { isNotTeamMember: true } } }, 
    ] 
... 
} 

私のメニューはページ全体の更新を行うことなく、更新されるようにroute.navigation配列をリフレッシュするクリーンな方法はありますか?

+0

https://github.com/aurelia/router/issues/216によると、あなたはおそらく 'router.navigation'配列を持つ**いじくり回す手動**に持っているアイテムを削除/追加します欲しいです。何か 'let index = this.router.navigation.findIndex(r => r.name == '削除したい名前'); this.router.navigation.splice(index、1);' –

+0

@ GabyakaG.Petrioli私はそれを避けることを望む。別の解決方法があるかどうかを見てみましょう。 – maximedubois

+0

問題は '!this.userService.isTeamMember'がプロパティを評価していることです。あなたはそのプロパティにデータバインドするのではなく、ルートを作成するときに評価するだけで、そのプロパティの値が変更されたときに自動的に変更されるわけではありません。私は 'zedL'によって提案された解決策が好きです。いくつかのオプションがありますが、与えられたものは悪くありません。 –

答えて

2

値コンバータを使用してrouter.routesを反復処理し、シグナリングを使用してバインディングを更新できます。

彼女は一例です。

https://gist.run/?id=f2e02b8caa831776d8571b9c886cfdd4

+0

'li'要素で' if.bind = "nav.nav" 'を使うこともできます。 –

関連する問題