2017-03-07 138 views
1

我的create-team路由的nav属性由我的userService中的可观察属性设置。 虽然我有一个问题。无法刷新router.navigation阵列以反映我的房产isTeamMember已更改。因此,即使我的isTeamMember属性返回true,那么除非我进行整页刷新,否则路径不会被隐藏。当路由属性更新时,Aurelia路由器router.navigation不刷新

我试过router.refreshNavigation(),它不起作用,因为据我所知,只有设置为nav: true的路由将被添加到router.navigation阵列中。

我正在循环访问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 =='name-you-want-to-remove'); this.router.navigation.splice(index,1);' –

+0

@ GabyakaG.Petrioli我希望我能避免这种情况。让我们看看是否有另一种解决方案,但感谢您的意见! – maximedubois

+0

问题是'!this.userService.isTeamMember'正在评估一个属性。您不是绑定到该属性的数据绑定,只是在创建路由时对其进行评估,并且在该属性值更改时不会自动更改。我喜欢'zedL'建议的解决方案。还有其他一些选择,但是给出的选项并不差。 –

回答