Vue.js
Haki cyklu życia
Szukaj…
Haczyki do Vue 1.x
init
created
$el
, ale podata observation
, skonfigurowanychcomputed properties
,watch/event callbacks
orazmethods
.
beforeCompile
compiled
directives
są powiązane, ale jeszcze przed udostępnieniem$el
.
ready
$el
a instancja jest wstrzykiwana do DOM po raz pierwszy.
attached
$el
jest dołączony do DOM przezdirective
lub instancja wywołuje$appendTo()
.
detached
$el
jest usuwany / odłączany od DOM lub metody instancji.
beforeDestroy
destroyed
bindings
idirectives
zostały już niezwiązane, a instancje potomne również zostały zniszczone.
Używanie w instancji
Ponieważ wszystkie haki cyklu życia w Vue.js
są tylko functions
, możesz umieścić dowolny z nich bezpośrednio w deklaracji instancji.
//JS
new Vue({
el: '#example',
data: {
...
},
methods: {
...
},
//LIFECYCLE HOOK HANDLING
created: function() {
...
},
ready: function() {
...
}
});
Typowe pułapki: Uzyskiwanie dostępu do DOM z haka `ready ()`
Częstym przykładem ready()
hooka ready()
jest dostęp do DOM, np. W celu zainicjowania wtyczki Javascript, uzyskania wymiarów elementu itp.
Problem
Ze względu na asynchroniczny mechanizm aktualizacji DOM Vue nie ma gwarancji, że DOM został w pełni zaktualizowany po wywołaniu hooka ready()
. Zwykle powoduje to błąd, ponieważ element jest niezdefiniowany.
Rozwiązanie
W tej sytuacji może pomóc metoda instancji $nextTick()
. Ta metoda odracza wykonanie udostępnionej funkcji zwrotnej do następnego tiku, co oznacza, że jest uruchamiana, gdy wszystkie aktualizacje DOM mają zagwarantowane zakończenie.
Przykład:
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. }) } }