我遇到服务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 或服务声明存在问题?
答案 0 :(得分:1)
角度服务是单例对象或函数......
服务工厂功能的目的是生成单个 对象或函数,表示对其余部分的服务 应用
尝试将工厂更改为以下内容:
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
服务进行新的通话。