Wie setze ich die standard activationStrategy in aurelia ein?

8

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? Ссылка

    
Vijay Bin 12.10.2016, 13:31
quelle

2 Antworten

22

Auf dem ViewModel

(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:

%Vor%

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.

In der RouteConfig

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.

invoke-lifecycle vs. replace

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:

  1. canDeactivate()
  2. deactivate()
  3. canActivate(params, routeConfig, navigationInstruction)
  4. 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:

  1. canDeactivate()
  2. deactivate()
  3. detached()
  4. unbind()
  5. (neue Instanz): constructor()
  6. canActivate(params, routeConfig, navigationInstruction)
  7. activate(params, routeConfig, navigationInstruction)
  8. created(owningView, thisView)
  9. bind(bindingContext, overrideContext)
  10. attached()

Wenn Sie also wirklich alle ViewModel-Lebenszyklusschritte ausführen möchten, müssen Sie replace verwenden.

    
Fred Kleuver 12.10.2016, 16:03
quelle
6

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:))

    
Marton Sagi 12.10.2016 14:43
quelle

Tags und Links