evgajukov
@evgajukov
Java разработчик

Как сделать компонент vue с несколькими корневыми элементами tr?

Нужно создать компонент vue, у которого несколько корневых элементов tr. Не совсем понимаю как это можно сделать. Т.е. такой компонент может генерировать от одной, до нескольким строк в таблице. Например, если эта строка в таблице не активна, то показывается только она сама, когда она становится активной, таблица как бы разъезжается и показываются дополнительные строки
  • Вопрос задан
  • 487 просмотров
Решения вопроса 2
yarkov
@yarkov Куратор тега Vue.js
Помог ответ? Отметь решением.
Да откройте уже для себя https://github.com/y-nk/vue-fragments и перестаньте мучиться ))
Ответ написан
0xD34F
@0xD34F Куратор тега Vue.js
Никак. О том, что корневой элемент должен быть один - прямо сказано в документации.

Правда, можно сделать такой компонент, который после монтирования будет перемещать потомков корневого элемента в родительский элемент, а сам корневой элемент удалять - в результате всё будет выглядеть так, будто и в самом деле у одного компонента было несколько корневых элементов. Если хотите, могу сделать небольшой пример того, как это могло бы выглядеть, но лично я бы вам не советовал идти подобным путём - ведь это хак, проблем огрести можно немало.

UPD. Есть вариант использовать render-функцию. Из неё можно вернуть массив элементов, если компонент функциональный. Так что с ограничениями, но всё-таки есть способ сделать компонент с несколькими корневыми элементами.

UPD. Ну конечно же, раз у вас таблица, никаких нескольких корневых элементов не нужно. Сделайте корневым элементом компонента tbody, а уже внутри него организовать показ дополнительных строк не будет проблемой:

<tbody>
  <tr>
    <!-- здесь основной контент -->
  </tr>
  <template v-if="условие показа дополнительного контента">
    <tr v-for="...">
      <!-- здесь дополнительный контент -->
    </tr>
  </template>
</tbody>

https://jsfiddle.net/5h0qsf26/
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы