AngularJS 工厂在第一次 API 调用后,不 ping 服务器和 returns 陈旧数据,在子粘性状态中
AngularJS Factory After First API call, does not ping server and returns stale data, inside child sticky state
几天来我一直在为这个问题苦思冥想,似乎无法弄明白....
我的路线是这样的:
$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)
该服务 returns 是一个陈旧的对象,当我查看我的服务器日志时,我没有看到任何 REST 调用。
当我刷新页面时,再次进行 api 调用(根据 PrepService),但是当在 CompanyController 上触发时,它 returns 过时的数据,没有 REST 命中服务器。
有人知道为什么会这样吗?是不是和resolves有关系,或者是粘滞状态?
$http
return 一个承诺,所以试着这样做,
companyService.getCompany(companyId).then(function(res){
console.log(res)
})
并检查开发者工具的网络选项卡是否有任何请求
看来是根据这个问题,这里有一个解决问题的技巧:
$http disabling caching does not work #1586
var req = {
method: 'GET',
url: 'http://example.com',
headers: {
'Cache-Control' : 'no-cache'
}
}
您必须使用这些 headers 调用每个 API 调用。将此添加到每个调用并刷新缓存。之后应该会很顺利地工作。
几天来我一直在为这个问题苦思冥想,似乎无法弄明白....
我的路线是这样的:
$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)
该服务 returns 是一个陈旧的对象,当我查看我的服务器日志时,我没有看到任何 REST 调用。
当我刷新页面时,再次进行 api 调用(根据 PrepService),但是当在 CompanyController 上触发时,它 returns 过时的数据,没有 REST 命中服务器。
有人知道为什么会这样吗?是不是和resolves有关系,或者是粘滞状态?
$http
return 一个承诺,所以试着这样做,
companyService.getCompany(companyId).then(function(res){
console.log(res)
})
并检查开发者工具的网络选项卡是否有任何请求
看来是根据这个问题,这里有一个解决问题的技巧:
$http disabling caching does not work #1586
var req = {
method: 'GET',
url: 'http://example.com',
headers: {
'Cache-Control' : 'no-cache'
}
}
您必须使用这些 headers 调用每个 API 调用。将此添加到每个调用并刷新缓存。之后应该会很顺利地工作。