我认为他们没有像您的问题那样的直接解决方案,因为每条路线都会在您访问它时触发请求,但是您可以尝试通过执行此技巧来解决您的问题:
- 声明全局或帮助 js 文件。
- 声明后,在其中创建访问路由时最容易触发的方法/方法,并将结果保存在全局变量中(例如:aboutUsDataCache),该变量可以在路由中访问。
- 将所有 ajax 请求路由操作替换为为其创建的方法。
- 添加条件来检查aboutUsDataCache是否为空,如果不为空则表示我们触发请求并且有数据并且我们在SPA中,因此我们不会再次访问方法。
来自实际项目的示例:
我有 main-config.js,它在路由之前加载并且有这个代码:
module.exports.tmpAppCache = {
fullCadaverList: false,
fullImagesList: false,
fullVideosList: false,
fullPdfList: false,
};
我有 ajax-helper.js 文件,它也在路由之前加载并且有方法
像这样:
export function getFullPdfList() {
// Your ajax request here
}
在路线中有这个代码:
{
path: '/pdf/',
async: function (routeTo, routeFrom, resolve, reject) {
if(globalObject.tmpAppCache.fullPdfList !== false){
resolve(
{
component: pdfPage,
},
{
context: {
data: globalObject.tmpAppCache.fullPdfList
}
}
);
}else{ getFullPdfList()
}
},
},
这个来自真实项目的例子,我尝试删除所有不需要的代码以使其清晰,以便有一些注释:
- 这个例子使用了WebPack,让你看到import和export的时候..
- 我从函数中删除了 promise,以使代码示例清晰。
- 由于需要在开始时触发所有请求,因此需要调用索引路由中的所有方法,这样当您像我们的示例一样进入任何页面时,您都会看到数据被缓存并且不会触发请求。
祝你好运