Экземпляр 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 и создавать хорошо структурированные приложения.