如何在初始 vue.js/vue-router 加载时加载所有服务器端数据? [英] How to load all server side data on initial vue.js / vue-router load?

查看:22
本文介绍了如何在初始 vue.js/vue-router 加载时加载所有服务器端数据?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我目前正在使用 WordPress REST API 和 vue-router 在一个小型单页站点上的页面之间进行转换.但是,当我使用 REST API 对服务器进行 AJAX 调用时,数据会加载,但仅在页面已呈现之后.

vue-router 文档 提供了有关如何在导航到每个路由之前和之后加载数据,但我想知道如何在初始页面加载时加载所有路由和页面数据,从而避免每次激活路由时都需要加载数据.

注意,我将我的数据加载到 acf 属性中,然后使用 this.$parent.acfs 在 .vue 文件组件中访问它.

ma​​in.js 路由器代码:

const router = new VueRouter({路线: [{路径:'/',组件:首页},{路径:'/about',组件:关于},{ 路径:'/票',组件:票},{路径:'/赞助商',组件:赞助商},],哈希爆炸:假});export.router = 路由器;const app = new Vue({路由器,数据: {acfs: ''},创建(){$.ajax({url: 'http://localhost/placeholder/wp-json/acf/v2/page/2',类型:'获取',成功:功能(响应){控制台日志(响应);this.acfs = response.acf;//this.backgroundImage = response.acf.background_image.url}.绑定(这个)})}}).$mount('#app')

Home.vue 组件代码:

出口默认{name: '关于',数据 () {返回 {acf: this.$parent.acfs,}},}

有什么想法吗?

解决方案

好吧,我终于想通了这个问题.我所做的只是在我的 main.js 文件中调用同步 ajax 请求,在该文件中我的根 vue 实例被实例化,并为请求的数据分配一个数据属性:

ma​​in.js

let acfData;$.ajax({异步:假,url: 'http://localhost/placeholder/wp-json/acf/v2/page/2',类型:'获取',成功:功能(响应){控制台日志(响应.acf);acfData = response.acf;}.绑定(这个)})const 路由器 = 新的 VueRouter({路线: [{路径:'/',组件:首页},{路径:'/about',组件:关于},{ 路径:'/票',组件:票},{路径:'/赞助商',组件:赞助商},],哈希爆炸:假});export.router = 路由器;const app = new Vue({路由器,数据: {acfs:acfData},创建(){}}).$mount('#app')

从这里开始,我可以像这样使用每个 .vue 文件/组件中提取的数据:

出口默认{名称:'应用',数据 () {返回 {acf: this.$parent.acfs,}},

最后,我在同一个 .vue 模板中使用以下内容渲染数据: