我使用 Ruby on Rails 为 Multipage 部分构建了一个大型的 Multipage VueJs 应用程序,并使用 vue 来实现交互。
你可以做的是在页面的某些部分初始化一个 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>
这里 floating-menu 和 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-container 元素上创建并初始化一个 Vue 应用程序,一切正常!
如果您需要在不同组件之间共享数据,任何标准数据共享技术(如 Event Bus 或 Vuex)都可以正常工作。
我写了一篇博文详细介绍了这个设置:https://blog.koley.in/2018/vue-components-in-multi-page-apps