Vue.js
Levenscyclushaken
Zoeken…
Haken voor Vue 1.x
init
created
$el
setup, maar nadata observation
zijncomputed properties
,watch/event callbacks
enmethods
ingesteld.
beforeCompile
compiled
directives
zijn gekoppeld, maar nog voordat$el
beschikbaar is.
ready
$el
zijn voltooid en de instantie wordt voor het eerst in de DOM geïnjecteerd.
attached
$el
aan de DOM is gekoppeld door eendirective
of instantie roept$appendTo()
.
detached
$el
wordt verwijderd / losgekoppeld van de DOM- of instantiemethode.
beforeDestroy
destroyed
bindings
endirectives
zijn al ongebonden geweest en onderliggende exemplaren zijn ook vernietigd.
In een instantie gebruiken
Aangezien alle lifecycle haken in Vue.js
zijn slechts functions
, kunt u een van hen te plaatsen direct in het geval declaraction.
//JS
new Vue({
el: '#example',
data: {
...
},
methods: {
...
},
//LIFECYCLE HOOK HANDLING
created: function() {
...
},
ready: function() {
...
}
});
Veel voorkomende valkuilen: toegang tot DOM vanaf de `ready ()` -haak
Een veel voorkomende usecase voor de ready()
hook is om toegang te krijgen tot de DOM, bijvoorbeeld om een Javascript-plug-in te initiëren, de afmetingen van een element te krijgen, enz.
Het probleem
Vanwege het asynchrone DOM-updatemechanisme van Vue, is het niet gegarandeerd dat de DOM volledig is bijgewerkt wanneer de hook ready()
wordt aangeroepen. Dit resulteert meestal in een fout omdat het element niet is gedefinieerd.
De oplossing
Voor deze situatie kan de instantiemethode $nextTick()
helpen. Met deze methode wordt de uitvoering van de geboden callback-functie uitgesteld tot na het volgende vinkje, wat betekent dat deze wordt geactiveerd wanneer alle DOM-updates gegarandeerd zijn voltooid.
Voorbeeld:
module.exports { ready: function () { $('.cool-input').initiateCoolPlugin() //fails, because element is not in DOM yet. this.$nextTick(function() { $('.cool-input').initiateCoolPlugin() // this will work because it will be executed after the DOM update. }) } }