2017-03-07 3 views
1

Die nav Eigenschaft meiner create-team Route wird durch eine beobachtbare Eigenschaft in meinem userService festgelegt. Ich habe jedoch ein Problem. Es gibt keine Möglichkeit, das Array router.navigation zu aktualisieren, um anzuzeigen, dass sich meine Eigenschaft isTeamMember geändert hat. Auch wenn meine isTeamMember-Eigenschaft "true" zurückgibt, wird die Route nicht ausgeblendet, es sei denn, ich führe eine vollständige Seitenaktualisierung durch.Aurelia-Router router.navigation wird nicht aktualisiert, wenn eine Route-Eigenschaft aktualisiert wird

Ich versuchte mit router.refreshNavigation() und es hat nicht funktioniert, da von dem, was ich verstehe, nur Routen, die auf nav: true festgelegt sind, werden dem router.navigation Array hinzugefügt.

Ich bin derzeit durch router.navigation Array durchlaufen, um mein Menü für meine App anzuzeigen. Aber wenn der Benutzer ein Team erstellt, möchte ich diese Route aus dem Menü ausblenden, da der Benutzer jetzt ein Teambesitzer ist. Ich handhabe den Zugang zu dieser Route mit einer , die funktioniert, aber diese Route auch dynamisch verbergen möchte.

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 } } }, 
    ] 
... 
} 

Gibt es eine saubere Art und Weise die route.navigation Array so mein Menü aktualisiert auffrischen wird, ohne eine vollständige Aktualisierung der Seite zu tun zu haben?

+0

Nach https://github.com/aurelia/router/issues/216 Sie müssen wahrscheinlich ** manuell ** Kesselflicker mit dem 'router.navigation' Array und Hinzufügen/Entfernen Sie das Element wollen. So etwas wie 'let index = this.router.navigation.findIndex (r => r.name == 'name-you-will-to-remove'); this.router.navigation.splice (index, 1);' –

+0

@ GabyakaG.Petrioli Ich wünschte, ich könnte das vermeiden. Mal sehen, ob es eine andere Lösung gibt, aber danke für die Eingabe! – maximedubois

+0

Das Problem ist, dass '! This.userService.isTeamMember' eine Eigenschaft auswertet. Sie binden nicht an diese Eigenschaft, sondern bewerten sie nur beim Erstellen der Route. Sie wird nicht automatisch geändert, wenn sich der Wert dieser Eigenschaft ändert. Ich mag die von 'zedL' vorgeschlagene Lösung. Es gibt einige andere Möglichkeiten, aber die gegebene ist nicht schlecht. –

Antwort

2

Sie können über router.routes mit einem Wertkonverter iterieren und die Bindung mit dem Signalgeber aktualisieren.

Sie ist ein Beispiel gist.

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

+0

Sie könnten auch 'if.bind =" nav.nav "' auf den 'li' Elementen verwenden, richtig? –

Verwandte Themen