another_dream
@another_dream
Backend-разработчик, Laravel/ZF2/Yii2

Как правильно инициализировать Vue-компонент после появления элемента в DOM?

Имеется страница, на которой есть кнопка, открывающая модальное окно.
Контент модального окна подгружается через AJAX и содержимое ответа (HTML) вставляется в DOM.
В этом HTML содержатся некоторые Vue-компоненты (компонент комменатриев).
Как грамотно инстанцировать этот Vue-компонент?

Текущая реализация
import Vue from "vue";
import Comments from "./components/comments.vue";
import {listenDomForElement} from "./../../common/helpers";

'use strict';

/** Variables */
let commentsBlockVm,
    vueElement = '#comments-block';

/** Комментарии */
commentsBlockVm = new Vue({
    name: 'comments-block',
    components: {Comments},
});

/** Специальный хелпер, слушающий DOM (MutationObserver) */
listenDomForElement(vueElement, function (element) {
    // Коллбэк исполнится, когда элемент появится в DOM
    // Маунтим Vue инстанс к нужному элементу
    commentsBlockVm.$mount(element);
    // Без этого компонент нормально не работает
    window.commentsBlockVm = commentsBlockVm;
});

export {commentsBlockVm}



Девтулз пуст.
drHtLtA.png

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

Спасибо.
  • Вопрос задан
  • 472 просмотра
Решения вопроса 1
another_dream
@another_dream Автор вопроса
Backend-разработчик, Laravel/ZF2/Yii2
Проблема решилась подключенем JS файла прямо в HTML, который прилетает вместе с контентом модального окна.
Видимо, сразу так и нужно было сделать, хотя и выглядит грубовато.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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