Wie werden alle serverseitigen Daten auf die anfängliche vue.js / vue-Router-Auslastung geladen?

11

Ich verwende derzeit die WordPress-REST-API und den vue-router, um zwischen Seiten auf einer kleinen einzelnen Seite umzuschalten. Wenn ich einen AJAX-Aufruf mit der REST-API an den Server mache, werden die Daten jedoch geladen, jedoch erst, nachdem die Seite bereits gerendert wurde.

Die Vue-Router-Dokumentation bietet einen Einblick in das Laden von Daten davor und danach Navigieren zu jeder Route, aber ich würde gerne wissen, wie man alle Routen- und Seitendaten bei der anfänglichen Seitenladung lädt, wobei jedes Mal, wenn eine Route aktiviert wird, Daten geladen werden müssen.

Beachten Sie, dass ich meine Daten in die acf -Eigenschaft lade und dann darauf innerhalb einer .vue -Dateikomponente mit this.$parent.acfs zugreife.

main.js Router-Code:

%Vor%

Home.vue-Komponentencode:

%Vor%

Irgendwelche Ideen?

    
10000RubyPools 10.01.2017, 15:56
quelle

4 Antworten

1

Okay, ich habe das endlich herausgefunden. Alles was ich mache, ist eine synchrone Ajax-Anfrage innerhalb meiner main.js -Datei aufzurufen, wo meine Root-Vue-Instanz instanziiert wird, und eine Dateneigenschaft den angeforderten Daten wie folgt zuzuordnen:

main.js

%Vor%

Von hier aus kann ich die gezogenen Daten innerhalb jeder einzelnen .vue Datei / Komponente wie folgt verwenden:

%Vor%

Schließlich rendere ich die Daten innerhalb der gleichen .vue Vorlage mit den folgenden:

%Vor%

Die wichtigste Information, die mitgenommen werden muss, ist, dass alle ACF-Daten nur EINMALIG am Anfang aufgerufen werden, verglichen mit jedem Besuch einer Route mit etwas wie beforeRouteEnter (to, from, next) . Als Ergebnis kann ich seidenweiche Seitenübergänge wie gewünscht erhalten.

Hoffe, das hilft jedem, der auf das gleiche Problem stößt.

    
10000RubyPools 11.01.2017, 01:43
quelle
14

Mein Ansatz ist es, die Konstruktion des Ladens und des Haupt-Vue zu verzögern, bis mein AJAX-Aufruf zurückkehrt.

store.js

%Vor%

main.js

%Vor%

Ich habe diesen Ansatz mit anderen Frameworks wie Angular und ExtJS verwendet.

    
Miguel 26.08.2017 21:02
quelle
2

Überprüfen Sie diesen Abschnitt in der Dokumentation des Vue-Routers

Ссылка

Zuerst müssen Sie eine Methode schreiben, die Daten von Ihrem Endpunkt holt, und dann watcher verwenden, um die Route zu beobachten.

%Vor%

Da Sie mit der WP Rest-API arbeiten, können Sie mein Repo auf Github Ссылка

    
Belmin Bedak 10.01.2017 19:11
quelle
1

Sie können Navigationswächter verwenden.

Bei einer bestimmten Komponente würde es so aussehen:

%Vor%

Sie können allen Komponenten auch einen Navigationsschutz hinzufügen:

%Vor%

Es ist zu beachten, dass die Navigationshilfen asynchron sind. Daher müssen Sie den next() -Rückruf aufrufen, wenn das Laden der Daten abgeschlossen ist. Ein echtes Beispiel aus meiner App (wo sich die Guard-Funktion in einer separaten Datei befindet):

%Vor%

In Ihrem Fall müssten Sie natürlich next() im success Callback aufrufen.

    
mingos 10.01.2017 16:03
quelle