Angularjs服务不会执行多个http请求

时间:2014-02-20 20:25:09

标签: angularjs angularjs-service angularjs-http

我遇到服务angularjs的问题,不要发出多个http请求。

服务:

.factory('checkpoints', function($http, user_auth) {
            var promise = $http({
                method: "POST",
                url: remote_ws + 'index/',
                data: user_auth.get,
                cache:false
            }).
                    success(function(data, status, headers, config) {
                        if (data.result == "OK") {
                            window.localStorage.setItem("last_id", data.update[0].last_id);
                            window.localStorage.setItem("last_count", data.update[0].last_count);
                        }
                        return data;
                    }).
                    error(function(data, status, headers, config) {
                        data.result = "ERROR";
                        data.status = status;
                        return data;
                    });
            return promise;
        })

在控制器中:

var UpdateCheckpoints = function() {
        checkpoints.then(function(promise) {
            if (promise.data.result == "OK") {
                $scope.map.checkpoints = promise.data.markers;
                _.each($scope.map.checkpoints, function(marker) {
                    marker.distance = $scope.c_distance(marker);
                    marker.onClicked = function() {
                        onMarkerClicked(marker.id);
                    };
                });
            } else {
                $location.search({error: true, error_text: session_error}).path("/login");
                if (!$scope.$$phase) {
                    $scope.$apply();
                }
            }
        })

当我调用:UpdateCheckpoints()时,结果为null。

仅完成第一个请求。

$ http 服务声明存在问题?

1 个答案:

答案 0 :(得分:1)

来自documentation

  

角度服务是单例对象或函数......

     

服务工厂功能的目的是生成单个   对象或函数,表示对其余部分的服务   应用

尝试将工厂更改为以下内容:

app.factory('checkpointService', function($http, user_auth) {

  return {
    getCheckpoints: function() {

      return $http({
          method: "POST",
          url: remote_ws + 'index/',
          data: user_auth.get,
          cache: false
        })
        .success(function(data, status, headers, config) {
          if (data.result == "OK") {
            window.localStorage.setItem("last_id", data.update[0].last_id);
            window.localStorage.setItem("last_count", data.update[0].last_count);
          }
          return data;
        })
        .error(function(data, status, headers, config) {
          data.result = "ERROR";
          data.status = status;
          return data;
        });
    }
  };
});

并将其命名为:

checkpointService.getCheckpoints().then(function(promise) { ...

现在checkpointService将成为单身对象,但每次拨打getCheckpoints时,都应通过$http服务进行新的通话。