Как по клику добавить компонент на страницу VUE JS?

В Vue.js существует несколько способов добавления компонентов на страницу по клику. Рассмотрим два наиболее популярных подхода: использование директивы v-if и динамической компоновки.

1. Использование директивы v-if:
Директива v-if в Vue.js позволяет добавлять или удалять элементы из дерева компонентов на основе условия. Для добавления компонента на страницу по клику, мы можем создать переменную, которая будет определять, должен ли компонент отображаться или нет. При клике на элемент, мы будем изменять значение этой переменной, что приведет к появлению компонента на странице.
Пример:

<template>
<div>
<button @click="showComponent = !showComponent">Добавить компонент</button>
<div v-if="showComponent">
<my-component></my-component>
</div>
</div>
</template>

<script>
export default {
data() {
return {
showComponent: false
}
}
}
</script>

В приведенном выше примере у нас есть кнопка "Добавить компонент". При клике на эту кнопку значение переменной showComponent будет изменяться, что приведет к отображению или скрытию компонента <my-component>.

2. Динамическая компоновка:
Другой способ добавления компонентов на страницу по клику - использование динамической компоновки. При таком подходе мы будем использовать метод Vue.js $component для динамического создания и монтирования компонента на странице.
Пример:

<template>
<div>
<button @click="addComponent">Добавить компонент</button>
<div ref="container"></div>
</div>
</template>

<script>
import MyComponent from './MyComponent.vue';

export default {
methods: {
addComponent() {
const componentInstance = this.$component(MyComponent);
componentInstance.$mount();
this.$refs.container.appendChild(componentInstance.$el);
}
}
}
</script>

В этом примере мы импортируем компонент MyComponent из файла MyComponent.vue и используем метод $component для динамического создания экземпляра компонента. Мы также используем метод $mount для монтирования компонента и добавляем его в указанный контейнер с помощью $refs.

Оба подхода имеют свои преимущества и могут быть использованы в зависимости от ваших потребностей. Директива v-if более проста в использовании, но может быть неэффективной, если у вас есть множество компонентов для добавления или удаления. Динамическая компоновка предлагает большую гибкость, но требует более сложной логики кода. Выбор зависит от конкретного случая использования.