Vue. js эквивалент appendChild для динамического добавления нового элемента / компонента? - PullRequest
2 голосов
/ 12 января 2020

В Vue. js, у меня есть var app = new Vue({...});, и у меня есть компонент Vue.component('mycomponent', ..., где я могу использовать такой компонент без каких-либо проблем, напрямую добавив <mycomponent></mycomponent> в html. Что я должен сделать sh, так это динамически добавлять эти компоненты по требованию, может быть, после нажатия кнопки или когда происходит какое-либо другое подобное событие. В raw JS я бы использовал document.createElement... при возникновении события, а затем набрал el.appendChild.., чтобы добавить его в html. Как бы я поступил так же с Vue. js?

Я не делаю ничего фантастического с node js. Это на одной html странице с <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> в <head>.

1 Ответ

3 голосов
/ 12 января 2020

Для этого «Vue способ» обычно включает использование v-if, v-for или <component>, в зависимости от что вы хотите сделать:

  • Используйте v-if, чтобы условно показать компонент / элемент на основе условия.
  • Используйте v-for, чтобы отобразить список компонентов / элементов.
  • Используйте <component> для визуализации динамического c компонента / элемента.

Таким образом, для достижения того, что вы описали в своем вопросе, вы можете объявить логическое свойство данных visible например:

data() {
  return {
    visible: false
  }
}

и использовать его с v-if для управления видимостью компонента в шаблоне:

<mycomponent v-if="visible"></mycomponent>

Для этого необходимо, чтобы <mycomponent> существовало в шаблоне заранее. , Если вы не знаете, какой компонент вы хотите показать, то вы можете либо включить каждую возможность в шаблон и отобразить ту, которая вам нужна, на основании некоторого условия:

<comp1 v-if="comp1Visible"></comp1>
<comp2 v-if="comp2Visible"></comp2>
<comp3 v-if="comp3Visible"></comp3>

или вы можете использовать <component> вместе с другим свойством данных (comp), которое вы можете установить для имени компонента, который вы хотите отобразить:

<component v-if="visible" :is="comp"></component>

То, что вы описали (document.createElement, а затем el.appendChild), делает не существует в Vue. Vue имеет строгий механизм рендеринга, с которым вам нужно работать; невозможно динамически создавать компоненты и вставлять их в DOM случайным образом. Технически вы можете сделать comp = new Vue() как эквивалент document.createElement, а затем el.appendChild(comp.$el), но это, вероятно, не то, что вы хотите сделать, потому что вы будете создавать независимый Vue экземпляр, который вы пришлось бы управлять вручную без простого способа передачи данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...