Мы используем Vue для реализации отдельных компонентов, в том числе и на "традиционных" сайтах.
Можно и с модальным окном (полноценным, с portal-vue и т.д.). Упрощённый пример:
import Vue from 'vue';
import Modal from '@/scripts/vue/components/Modal.vue';
// Находим элемент-компонент
// Скорее всего тут будет не id, а что-то вроде селектора по классу js-some-thing и т.д.
const el = document.getElementById('some-id');
// Создаём элемент для vue-компонента
// И помещаем его внутрь
// Не обязательно, но так удобно потом "прибираться"
const mountingPoint = document.createElement('div');
el.appendChild(mountingPoint);
// Создаём инстанс vue, монтируем его в наш элемент
let modal = new Vue({
el: mountingPoint,
render(h) {
// А вот и модалка
return h(Modal);
},
});
Соответственно можно передавать props, вкладывать другие компоненты в модалку, изменять дата, слушать события и т.д. и т.п.
Подробнее про рендер-функции
https://ru.vuejs.org/v2/guide/render-function.html
Когда нужно прибраться за собой:
modal.$destroy();
modal.$el.parentElement.removeChild(modal.$el);
modal = null;