Экземпляр Vue (Vue instance) — это фундаментальная концепция во Vue.js, представляющая корневой объект приложения или компонента. Рассмотрим его детально.
Базовое создание:
const vm = new Vue({
el: '#app',
data: {
message: 'Hello Vue!'
}
})
Где:
vm
— сокращение от ViewModel (общепринятое название)el
— элемент DOM для монтированияdata
— реактивные данныеdata() {
return { count: 0 }
},
methods: {
increment() {
this.count++
}
}
Доступны в шаблоне как {{ count }}
и @click="increment"
computed: {
doubleCount() {
return this.count * 2
}
}
watch: {
count(newVal, oldVal) {
console.log(`Count changed from ${oldVal} to ${newVal}`)
}
}
Полный набор хуков:
{
beforeCreate(),
created(),
beforeMount(),
mounted(),
beforeUpdate(),
updated(),
beforeDestroy(),
destroyed()
}
$data
— ссылка на объект данных$props
— полученные props$el
— корневой DOM элемент$options
— использованные при создании опции$refs
— ссылки на DOM элементы/компоненты$root
— корневой экземпляр$parent
— родительский экземпляр$children
— дочерние компоненты$watch()
— программное добавление наблюдателя$set()
— добавление реактивного свойства$delete()
— удаление реактивного свойства$on()
, $emit()
, $off()
— работа с событиями$nextTick()
— выполнение после обновления DOMconsole.log(vm.$data.message) // "Hello Vue!"
console.log(vm.message) // Автоматический прокси
vm.$set(vm.someObject, 'newProp', 42)
this.count = 5
this.$nextTick(() => {
// DOM обновлен
})
Данные в data
становятся реактивными автоматически, но:
Vue.set()
/this.$set()
Можно отложить монтирование:
const vm = new Vue({
// без el
template: '<div>{{ message }}</div>'
})
vm.$mount('#app') // монтировать позже
$data
$parent
/$children
(нарушают инкапсуляцию)$refs
(реактивные данные предпочтительнее)$nextTick
для работы с DOM после изменений$emit
для коммуникации с родителемЭкземпляр Vue — это центральный объект, управляющий частью приложения. Понимание его жизненного цикла, свойств и методов позволяет эффективно работать с Vue.js и создавать хорошо структурированные приложения.