Опции экземпляра Vue
Опции в Vue — это различные опции, доступные в экземпляре Vue при использовании Options API.
Некоторые общие опции экземпляров Vue:
-
el- Указывает DOM-элемент, к которому монтируется экземпляр Vue. Если не указан, экземпляр Vue не будет смонтирован автоматически.
-
data— Определяет объект data экземпляра Vue. Шаблон, вычисляемые свойства, методы, наблюдатели и т. д. экземпляра Vue могут обращаться к этим данным.
-
computed— Содержит вычисляемые свойства, значения которых кэшируются на основе их зависимостей. Вычисляемые свойства пересчитываются только при изменении их зависимостей.
-
methods— Определяет методы экземпляра Vue, которые можно вызывать в шаблоне через обработчики событий.
-
watch— Содержит один или несколько наблюдателей для отслеживания изменений данных в экземпляре Vue и реагирования на них.
-
props— Определяет внешние данные, которые может получать компонент.
-
components— Позволяет регистрировать пользовательские компоненты в экземпляре Vue.
-
directives— Позволяет регистрировать глобальные пользовательские директивы.
-
filters— Определяет фильтры, которые можно использовать в шаблоне для форматирования текста.
-
model— Задаёт пользовательские свойства и события v-model, используемые компонентом.
-
provide/inject— Обеспечивает возможность внедрения зависимостей, позволяя передавать данные между компонентами.
-
хуки жизненного цикла— Включает
onMounted,onUpdated,onUnmountedхуки жизненного цикла и т. д., используемые для выполнения кода на разных этапах экземпляра Vue. -
template- Определяет HTML-шаблон экземпляра Vue.
-
Функция render- Позволяет использовать функции JavaScript для рендеринга компонентов, предоставляя более продвинутые возможности настройки.
-
errorCaptured- Используется для глобального перехвата ошибок в экземпляре Vue.
-
emits- Определяет события, которые компонент может генерировать.
-
setup- Входная функция в Composition API Vue 3, используемая для организации логики компонента.
el
Точка монтирования, используемая для указания DOM-элемента, к которому монтируется экземпляр Vue:
Пример
// options
});
app.mount('#app');
data
-
Тип: Function или Object
-
Назначение:
dataэто место в экземпляре Vue, используемое для хранения данных компонента. Вы можетеdataопределить различные свойства данных в нём и использовать их на странице через синтаксис шаблонов.dataДанные в нём обновляются реактивно, то есть когда данные изменяются, связанное содержимое страницы обновляется автоматически.
Пример
data() {
return {
message: 'Hello Vue!'
};
}
});
computed
-
Тип: Object
-
Назначение:
computedСвойство позволяет объявлять вычисляемые свойства на основе реактивных зависимостей. Вычисляемые свойства пересчитываются только при изменении связанных с ними зависимостей, а результаты вычислений кэшируются, чтобы избежать ненужных повторных расчётов.
Пример
data() {
return {
firstName: 'John',
lastName: 'Doe'
};
},
вычислено: {
fullName() {
return `${this.firstName} ${this.lastName}`;
}
}
});
methods
-
Тип: Object
-
Назначение:
methodsСвойство используется для хранения методов в экземпляре Vue. Эти методы можно вызывать в шаблоне, а также использовать в других методах экземпляра. В отличие от вычисляемых свойств, методы выполняются заново при каждом вызове, что делает их подходящими для обработки событий или выполнения асинхронных операций.
Пример
data() {
return {
count: 0
};
},
methods: {
increment() {
this.count++;
}
}
});
watch
-
Тип: Object или Function
-
Назначение:
watchСвойство используется для наблюдения за изменениями данных в экземпляре Vue и реагирования на них. Когда отслеживаемые данные изменяются, выполняется указанная функция обратного вызова. Оно подходит для обработки асинхронной или сложной логики изменения данных.
Пример
data() {
return {
message: 'Hello Vue!'
};
},
watch: {
message(newValue, oldValue) {
console.log(`Сообщение изменено с ${oldValue} на ${newValue}`);
}
}
});
props
-
Тип: Array или Object
-
Назначение:
propsСвойство используется для получения данных, передаваемых от родительского компонента дочернему компоненту. В дочернем компоненте,propsданные, переданные родительским компонентом, принимаются и могут использоваться внутри компонента.
В следующем примере MyComponent получает prop title и использует его в шаблоне:
Пример
props: ['title'],
template: '<h1>{{ title }}</h1>'
};
const app = Vue.createApp({
components: {
'my-component': MyComponent
},
template: '<my-component title="Hello Vue 3!"></my-component>'
});
app.mount('#app');
template
-
Тип: String
-
Назначение:
templateСвойство определяет структуру шаблона Vue-компонента. В шаблоне можно использовать синтаксис шаблонов Vue, включая интерполяцию, директивы, вычисляемые свойства и т. д. В конечном счёте шаблон компилируется в функцию рендеринга для генерации виртуального DOM компонента.
Пример
data() {
return {
message: 'Hello Vue!'
};
},
template: '<div>{{ message }}</div>'
});
components
Опция `components` используется для регистрации локальных компонентов.
Пример
template: '<div>A child component</div>'
};
const app = Vue.createApp({
components: {
'child-component': ChildComponent
},
template: '<child-component></child-component>'
}).mount('#app');
provide / inject
Родительский компонент предоставляет данные, а дочерний компонент внедряет их и использует.
Пример
inject: ['message'],
template: '<div>{{ message }}</div>'
};
const app = Vue.createApp({
предоставляют() {
return {
message: 'Provided Message'
};
},
components: {
'child-component': ChildComponent
},
template: '<child-component></child-component>'
}).mount('#app');
Хуки жизненного цикла
beforeCreate
Вызывается перед инициализацией экземпляра.
Пример
beforeCreate() {
console.log('beforeCreate');
}
}).mount('#app');
created
Вызывается после создания экземпляра.
Пример
created() {
console.log('created');
}
}).mount('#app');
beforeMount
Вызывается перед монтированием.
Пример
beforeMount() {
console.log('beforeMount');
}
}).mount('#app');
mounted
Вызывается после монтирования экземпляра.
Пример
mounted() {
console.log('mounted');
}
}).mount('#app');
beforeUpdate
Вызывается перед обновлением данных.
Пример
data() {
return {
message: 'Hello'
};
},
beforeUpdate() {
console.log('beforeUpdate');
}
}).mount('#app');
updated
Вызывается после обновления данных.
Пример
data() {
return {
message: 'Hello'
};
},
updated() {
console.log('updated');
}
}).mount('#app');
beforeUnmount
Вызывается перед размонтированием экземпляра.
Пример
beforeUnmount() {
console.log('beforeUnmount');
}
}).mount('#app');
unmounted
Вызывается после размонтирования экземпляра.
Пример
unmounted() {
console.log('unmounted');
}
}).mount('#app');
Другие параметры
directives
Регистрирует локальные директивы.
Пример
directives: {
focus: {
mounted(el) {
el.focus();
}
}
},
template: '<input v-focus>'
}).mount('#app');
mixins
Объекты миксинов.
Пример
created() {
console.log('Mixin created');
}
};
const app = Vue.createApp({
mixins: [myMixin],
created() {
console.log('Компонент создан');
}
}).mount('#app');
extends
Расширить другой компонент.
Пример
created() {
console.log('BaseComponent created');
}
};
const app = Vue.createApp({
extends: BaseComponent,
created() {
console.log('Extended component created');
}
}).mount('#app');
inheritAttrs
Наследовать ли атрибуты от родительского компонента.
Пример
inheritAttrs: false,
props: ['title'],
template: '<div><h1>{{ title }}</h1></div>'
};
const app = Vue.createApp({
components: {
'my-component': MyComponent
},
template: '<my-component title="Hello" id="app"></my-component>'
}).mount('#app');
setup
Используется для Composition API.
Пример
setup() {
const message = Vue.ref('Hello Vue 3!');
return { message };
},
template: '<h1>{{ message }}</h1>'
}).mount('#app');
expose
В Composition API Vue 3, когда вы используете функцию setup для определения логики компонента, вы можете использовать метод expose, чтобы явно указать свойства и методы, которые должны быть доступны извне.
Ниже приведён простой пример, показывающий, как использовать expose для предоставления свойств и методов в компоненте Vue 3:
Родительский компонент (ParentComponent.vue)
<div>
<child-component ref="child"></child-component>
<button @click="callChildMethod">Вызвать метод дочернего компонента</button>
</div>
</template>
<script>
import { ref } from 'vue';
import ChildComponent from './ChildComponent.vue';
export default {
components: {
ChildComponent
},
setup() {
const child = ref(null);
const callChildMethod = () => {
if (child.value) {
child.value.exposedMethod();
}
};
return {
child,
callChildMethod
};
}
};
</script>
Дочерний компонент (ChildComponent.vue)
<div>
<p>{{ exposedData }}</p>
</div>
</template>
<script>
import { ref } from 'vue';
export default {
setup(_, { expose }) {
const exposedData = ref('Привет от дочернего компонента');
const exposedMethod = () => {
console.log('Вызван метод дочернего компонента');
};
expose({
exposedData,
exposedMethod
});
return {
exposedData
};
}
};
</script>
Пояснение:
Родительский компонент:
- В родительском компоненте используйте
refчтобы создать ссылку на дочерний компонент.child。 - В
callChildMethodВ методе черезchild.valueполучите доступ к экземпляру дочернего компонента и вызовите методы, предоставленные дочерним компонентом.exposedMethod。
- В родительском компоненте используйте
Дочерний компонент:
- В дочернем компоненте
setupфункции, черезrefсоздайте реактивные данныеexposedData。 - определите метод
exposedMethod, используемый для демонстрации того, как предоставлять методы. - Используйте
exposeметод для явного предоставленияexposedDataиexposedMethodродительскому компоненту. - Return
exposedData, чтобы его можно было использовать в шаблоне.
- В дочернем компоненте