Wie laufen VueJS code nur nach Vue ist voll geladen und initialisiert?
Arbeite ich an einem Vue-Komponente gesetzt wird auf mehrere Webseiten über ein CMS-system. Die Frage, die ich begegnen, ist, dass selbst wenn mein js Script Ladereihenfolge ist richtig, irgendwann bekomme ich diesen Fehler:
Uncaught ReferenceError: Vue is not defined
at HTMLDocument.<anonymous>
Vue geladen wird über cdn und es ist über die Komponente code.
Alle Vue-code wird ausgeführt, wie diese:
document.addEventListener("DOMContentLoaded", () => {
//here is the Vue code
});
Ich auch noch ein setTimeout() in der DOMContentLoaded-Ereignis und immer noch nicht den trick tun.
window.onload = function()
nicht in allen Fällen. Ich habe immer noch diesen Fehler von Zeit zu Zeit.
Die Skripte geladen werden, in den Körper.
Haben Sie eine Idee, was es sein kann, einen anderen Ansatz? Ich möchte sicher sein, dass in dem moment die Vue-code ausgelöst wird, Vue geladen und bereit zu sein, initialisiert auf der Seite.
Danke!
Als Lösung u der check-in Intervall : 'Vue undefined?'
InformationsquelleAutor Bogdan Lungu | 2017-04-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden das load-Ereignis zu warten, bis alle Ressourcen geladen:
Weitere Erklärung
Können Sie auch das load-Ereignis für ein bestimmtes script.
console.log sollte sehen, ob der code ausgeführt wurde. Sie könnten auch gehen in den browser, debugger und setzen Sie einen break-Punkt. Vielleicht sollten Sie sich eine Frage stellen.
InformationsquelleAutor Roy J
verwenden vue
mounted()
zum ausführen von beliebigen code auf die Seite laden, undupdated()
zu laufen, nachdem alle Operationen auf Komponenten, damit eine perfekte Lösung wäre die Kombination beider Roy j und vue lifecycle-hooksbeachten Sie, dass kann man auch weglassen
window.addEventListener()
und es immer noch zu funktionieren, aber es verpassen könnte + wenn Sie mit so etwas wie jqueryouterHeight(true)
ist es besser, verwenden Sie es in das Fenster-Ereignis, um sicherzustellen, Sie werden immer die richtigen Werte.Update 1 :
statt
window.addEventListener('load')
es gibt auch einen anderen Weg, indem Siedocument.readyState
so können die genanntenUpdate 2 :
die zuverlässigste Art, die ich bisher gefunden habe, wäre mit
debounce
auf$nextTick
, so wird der Gebrauchbei der Verwendung debounce mit aktualisiert es schwierig wird, so stellen Sie sicher, um es zu testen, b4 bewegen.
Update 3 :
können Sie auch versuchen, MutationObserver
Vue.nextick anstelle von setTimeout in diesem Fall.
nexttick nicht immer so funktioniert wie erwartet & weder abgewiesen wird, weil der dom kann länger dauern, zu aktualisieren, leider vue nicht über ein Ereignis, wenn dom fertig zu aktualisieren, so dass Ihr ein bisschen hit & miss
Ich glaube nicht, dass. Deine Antwort Wunde nicht helfen, mich am Ende, weil ich brauchte, um eine axios-Aufruf auf
planner.vue
zum aktualisieren der vuex Staat, und mit dem code oben funktioniert aber nur einmal, und wenn das dom geladen wurde, auf die spezifische route, die mit Planer.vue, wenn ich von der homepage geladen und ging dann in /app/Planer die Vorlage nicht geladen werden, weil der dom war schon einmal geladen, in der homepage. Ich musste am Ende verschieben die ganze axios Anfrage in eine Vuex Aktion, dann versenden es direkt nach Erstellung der Vuex-Instanz. Dies sollte die akzeptierte Antwort, btw. LolHinzugefügt
InformationsquelleAutor ctf0