Динамические компоненты - это мощная функция Vue.js, которая позволяет переключаться между разными компонентами без необходимости писать сложную логику условного рендеринга (v-if/v-else).
Динамические компоненты реализуются с помощью специального компонента <component>
и атрибута is
:
<component :is="currentComponent"></component>
Где currentComponent
- это имя компонента, который должен отображаться в данный момент.
currentComponent
Vue автоматически:
// Зарегистрируем несколько компонентов
const components = {
Home: { template: '<div>Домашняя страница</div>' },
About: { template: '<div>О нас</div>' },
Contact: { template: '<div>Контакты</div>' }
}
new Vue({
el: '#app',
data() {
return {
currentTab: 'Home',
components
}
}
})
<div id="app">
<button
v-for="(_, name) in components"
:key="name"
@click="currentTab = name"
>{{ name }}</button>
<component :is="currentTab"></component>
</div>
<keep-alive>
<component :is="currentComponent"></component>
</keep-alive>
<transition name="fade" mode="out-in">
<component :is="currentComponent"></component>
</transition>
components: {
DynamicComponent: () => import('./DynamicComponent.vue')
}
keep-alive
<component :is="currentComponent" :someProp="value"></component>
v-show
вместо динамических компонентов Динамические компоненты в Vue.js предоставляют гибкий механизм для условного отображения разных компонентов в одном месте DOM, что особенно полезно для создания табов, модальных окон и других динамических интерфейсов. Они сочетаются с системой переходов Vue и могут сохранять свое состояние при помощи <keep-alive>
.