当多次触发带有多次角度的http GET请求时,会调用.then回调并且有一个响应但是我的浏览器的网络选项卡上没有显示请求,并且响应的内容是错误的(以前的内容)解雇请求)。我假设它有一些角度/浏览器缓存问题,因为当它缓存在后端时,将显示请求。我尝试了几种禁用缓存的方法,但没有任何帮助。它可以做一些事情,从工厂返回http请求的承诺吗?
angular.module('eventLogServiceApp', [])
.factory('eventlog.service', ['$http', createEventLogService]);
function createEventLogService($http) {
return {
getNotable: $http.get('https://myurl.com/api/endpoint')
}
}
angular.module('myApp')
.controller("AdminEventLogController", ['$scope', 'TranslationService', 'eventlog.service', function ($scope, trans, EventLog) {
$scope.getNotable = function() {
EventLog.getNotable.then(function success(response) {
$scope.notable = response.data.length;
}, function error() {
});
};
}])
我发现如果我在一个函数中包含promise,请求会显示在网络选项卡中。我不知道为什么会这样,但确实如此。示例如下所示:
angular.module('eventLogServiceApp', [])
.factory('eventlog.service', ['$http', createEventLogService]);
function createEventLogService($http) {
return {
getNotable: function(){
return $http.get('https://myurl.com/api/endpoint')
}
}
}
angular.module('myApp')
.controller("AdminEventLogController", ['$scope', 'TranslationService', 'eventlog.service', function ($scope, trans, EventLog) {
$scope.getNotable = function() {
EventLog.getNotable().then(function success(response) {
$scope.notable = response.data.length;
}, function error() {
});
};
}])
编辑:添加了控制器/工厂
答案 0 :(得分:1)
你应该将你的逻辑包装成一个函数并将其返回到那里,否则它只会在初始请求时加载一次。
答案 1 :(得分:0)
您使用的是哪种浏览器?你在几个浏览器上试过吗?
您确定不过滤网络请求吗?
答案 2 :(得分:0)
实际上,这是因为没有将逻辑包装到函数中。这意味着一旦使用getNotable声明了一个变量,就会触发一个请求,并且getNotable将被响应填充。使用getNotable另一次不会触发新请求。而是返回已存储的响应。我通过将http请求包装到函数中并返回promise来修复它。
getNotable: function () {
return $http.get(Routing.generate('epubli_api_get_eventlog_notable'));
},