Aurelia ignoriert normalerweise alle Änderungen in der Querystring.
Es ist möglich, activationStrategy
auf invoke-lifecycle
in der VM zu setzen, so dass es alle Lebenszyklen in der VM erneut ausführt, wenn sich der Querystring ändert.
Um zu verhindern, dass mein Code verunreinigt wird (indem ich ihn in jede VM lege), möchte ich den Standard activationStrategy
auf invoke-lifecycle
setzen.
In der Benutzeroberfläche wurde erklärt, dass möglich ist , aber wie wird es eingestellt? Ссылка
(Ich habe Ihre Frage auch zuerst falsch gelesen, aber ich überlasse das der Vollständigkeit halber)
Platzieren Sie eine Methode determineActivationStrategy()
auf dem ViewModel und von dort können Sie den Namen oder Typ der Aktivierungsstrategie, die Sie verwenden möchten, zurückgeben. Beispiel:
Die Zeichenfolgen "invoke-lifecycle"
oder "replace"
funktionieren. Sie können die typisierte Version auch verwenden, indem Sie die enum activationStrategy
und die returing activationStrategy.replace
/ activationStrategy.invokeLifecycle
importieren. Sie arbeiten gleich.
Oder wie von Marton (der diese Antwort schon einmal gegeben hat) angegeben wurde, können Sie ihn direkt in route config als Eigenschaft activationStrategy
setzen.
Dieser Ansatz ist besser geeignet, wenn die Strategie nicht von einem bestimmten Zustand Ihres ViewModels abhängt und Sie Ihr View-Modell nicht mit diesem Zeug einstreuen möchten.
In deiner Frage sagst du, du willst
Führen Sie alle Lebenszyklen in der VM erneut aus
Beachten Sie, dass invoke-lifecycle
das vorhandene ViewModel wiederverwendet und nur den Lebenszyklus der Routeraktivierung aufruft, der wie folgt lautet:
canDeactivate()
deactivate()
canActivate(params, routeConfig, navigationInstruction)
activate(params, routeConfig, navigationInstruction)
Während replace
das vorhandene ViewModel wegwirft und den gesamten ViewModel-Lebenszyklus erneut aufruft, zusätzlich zum Lebenszyklus der Router-Aktivierung:
canDeactivate()
deactivate()
detached()
unbind()
constructor()
canActivate(params, routeConfig, navigationInstruction)
activate(params, routeConfig, navigationInstruction)
created(owningView, thisView)
bind(bindingContext, overrideContext)
attached()
Wenn Sie also wirklich alle ViewModel-Lebenszyklusschritte ausführen möchten, müssen Sie replace
verwenden.
activationStrategy
ist eine Eigenschaft von RouterConfig
, die das Routenkonfigurationsobjekt darstellt, das von config.map()
verwendet wird. Ich denke, dass Sie es für jede Route Definition festlegen müssen.
Beispiel:
%Vor%(Grund bearbeiten: Ich habe einen schrecklichen Fehler gemacht, indem ich deine Frage zuerst falsch gelesen habe, sorry:))
Tags und Links aurelia aurelia-router