Ich versuche eine class
zu dem html
Element hinzuzufügen, wenn Aurelia zu einer neuen Route navigiert, so dass ich die Seite anders stylen kann, wenn es geladen wird.Detect change to router.isNavigating
Meine aktuelle Lösung ist, die Klasse zu dem main
Element hinzuzufügen, weil das ein Teil meiner Ansicht ist und so ist es „einfach funktioniert“, wie folgt aus:
import {inject} from 'aurelia-framework';
import {Router} from 'aurelia-router';
@inject(Router)
export class App {
constructor (router) {
this.router = router;
}
}
Und dann in meiner Ansicht, die ich einfach tun:
<main class="${router.isNavigating ? 'loading' : ''}">
<router-view></router-view>
</main>
Aber, wie ich schon erwähnt, würde ich es vorziehen, die loading
Klasse das html
Element anstelle hinzuzufügen (so dass ich jeden einzelnen decendant auf der Seite Stil kann). Da das html
Element ist nicht Teil meiner Ansicht kann ich dies nicht auf die gleiche Weise erreichen, aber stattdessen muss ich document.documentElement.classList.add('loading')
wann immer router.isNavigating
ist wahr.
Also meine Frage ist; Wie kann ich das erreichen? Ich weiß, Aurelia unterstützt propertyChanged
Methoden, aber ich bin mir nicht sicher, wie es funktioniert, wenn es eine verschachtelte Eigenschaft wie router.isNavigating
, routerIsNavigatingChanged()
nicht funktioniert. Ich habe auch @computedFrom(router)
und Varianten davon versucht, aber kann es nicht zum Funktionieren bringen.
Fabios Antwort oben ist das Äquivalent zu '@computedFrom ('router.isNavigating')', aber ich denke, dass die Lösung mit dem EventAggregator der richtige Weg ist, dies zu tun. –
Ich stimme mit @AshleyGrant überein. –
Jungs lassen Sie mich fragen .. using 'isNavigating' zum Anzeigen/Verbergen der Spinner unter der Annahme, ich habe eine API-Aufruf in angehängten Ereignis .. der Spinner wird ausblenden, auch wenn mein Anruf noch nicht beendet wurde? –