Что вы можете сделать, это инициализировать приложение Vue в определенных частях страницы, поместив их в контейнер своего рода, а затем сделать то же самое для всех страниц, для которых требуются компоненты Vue.
Я делаю это таким образом, у меня есть контейнерный класс, называемый vue-container, который упаковывает мои вызовы компонентов следующим образом:
<div class="vue-container">
<floating-menu></floating-menu>
<show-pdf :resource="<%= @resource.as_json(current_user: current_user) %>"></show-pdf>
</div>
Здесь плавающее меню и show-pdf являются двумя компонентами Vue.
Затем в моем файле app.js, который импортирован для всех страниц, у меня есть следующий код:
if(window.vueapp == null){
window.vueapp = []
}
if(window.vueapp != null){
for(var i=0, len=vueapp.length; i < len; i++){
vueapp[i].$destroy();
}
window.vueapp = []
}
var myNodeList = document.querySelectorAll('.vue-container');
forEach(myNodeList, function (index, element) {
if (element != null) {
var vueapp = new Vue({
el: element,
store,
components: {
ShowPdf, FloatingMenu
}
})
window.vueapp.push(vueapp);
}
});
Это создает и инициализирует приложение Vue для каждого элемента .vue-container
, и все работает!
Если вам нужно обмениваться данными между различными компонентами, любой из стандартных методов обмена данными, таких как Event Bus или Vuex, будет работать просто отлично.
Я написал сообщение в блоге, подробно описывающее эту настройку: https://blog.koley.in/2018/vue-components-in-multi-page-apps