第一次API调用后,AngularJS工厂不ping服务器并返回儿童粘性状态内的陈旧数据



我已经在这台前敲了几天,似乎无法弄清楚....

我的路线看起来像这样:

$stateProvider.state({
            name: 'core.portfolio',
            url: '/portfolio',
            controller: 'portfolioController',
            controllerAs: 'vm',
            templateUrl: 'app/portfolio/partials/base.html',
            deepStateRedirect: true,
            sticky: true,
            resolve: {
                portfolioPrepService: function (portfolioService) {
                    return portfolioService.getPortfolio();
                },
            }
        }).state({
                name: 'core.portfolio.company',
                url: '/1/:companyId',
                resolve: {
                    companyPrepService: companyPrepService
                },
                views: {
                    'company': {
                        controller: 'CompanyController',
                        controllerAs: 'vm',
                        templateUrl: 'app/portfolio/company/company.tmpl.html'
                    }
                },
            sticky: true,
            deepStateRedirect: true
            }
        );

和我的服务这样:

function companyService($http, API_CONFIG) {
        var service = {};
        service = {
            getCompany: getCompany
        };
        function getCompany(id) {
            return $http({
                method: 'GET',
                url: API_CONFIG.url + 'companies/' + id + '/?embedded={"round":1}',
                cache: false
            })
        }
        return service;
    }

当我在CompanyController中拨打API时, companyService.getCompany(companyId)该服务返回一个过时的对象,当我查看服务器日志时,我看不到任何休息调用。

当我刷新页面时,API调用是再次(按PrepService进行),但是当在CompanyController上触发时,它会返回过时的数据,而在服务器上没有休息。

有人知道为什么会发生这种情况吗?它与解决方案有关还是它处于粘性状态?

$http返回诺言,所以尝试这样做,

companyService.getCompany(companyId).then(function(res){
  console.log(res)
})

并查看任何请求的开发人员工具的网络选项卡

看来,根据这个问题,这是如何解决问题的入侵:

$ http禁用缓存不起作用#1586

var req = {
 method: 'GET',
 url: 'http://example.com',
 headers: {
    'Cache-Control' : 'no-cache'
 }
}

您必须使用这些标头调用每个API调用。将其添加到每个呼叫中,然后冲洗您的缓存。此后应进行游泳。

最新更新