Angular HTTP.get未在网络选项卡中触发/显示

时间:2018-02-07 08:46:36

标签: angularjs get

当多次触发带有多次角度的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() {
        });
    };
 }])

编辑:添加了控制器/工厂

3 个答案:

答案 0 :(得分:1)

你应该将你的逻辑包装成一个函数并将其返回到那里,否则它只会在初始请求时加载一次。

答案 1 :(得分:0)

您使用的是哪种浏览器?你在几个浏览器上试过吗?

您确定不过滤网络请求吗?

答案 2 :(得分:0)

实际上,这是因为没有将逻辑包装到函数中。这意味着一旦使用getNotable声明了一个变量,就会触发一个请求,并且getNotable将被响应填充。使用getNotable另一次不会触发新请求。而是返回已存储的响应。我通过将http请求包装到函数中并返回promise来修复它。

getNotable: function () {
        return $http.get(Routing.generate('epubli_api_get_eventlog_notable'));
    },