Angularjs Angular JS服务调用不返回数组
我正在尝试创建一个服务,返回角JS中热图的坐标 服务内容如下:Angularjs Angular JS服务调用不返回数组,angularjs,Angularjs,我正在尝试创建一个服务,返回角JS中热图的坐标 服务内容如下: var traffic = angular.module('traffic', ['ngMap']) .factory('checkpointService', function($q){ return function($scope, $http){ var d = $q.defer(); $http.get("http://127.0.0.1:8000/traffic/get/?end=" + $scop
var traffic = angular.module('traffic', ['ngMap'])
.factory('checkpointService', function($q){
return function($scope, $http){
var d = $q.defer();
$http.get("http://127.0.0.1:8000/traffic/get/?end=" + $scope.endDateTime + "&format=json&search=Search&start=" + $scope.startDateTime)
.then(function(response) {
var points = []
angular.forEach(response.data, function(value, key) {
console.log("Response: " + JSON.stringify(response))
points.push(new google.maps.LatLng(JSON.parse(JSON.stringify(value))["lat"], JSON.parse(JSON.stringify(value))["long"]))
});
//d.resolve(points)
console.log("Points: " + points)
return points;
});
}
});
电话:
var points = new Array();
points = checkpointService($scope, $http)
heatmap = new google.maps.visualization.HeatmapLayer({
data: points,
map: $scope.map
});
错误是“不是数组”
我知道$http调用是异步的,因此使用了承诺。我也尝试过使用$q.defer:
.factory('checkpointService', function($q){
return function($scope, $http){
var d = $q.defer();
$http.get("http://127.0.0.1:8000/traffic/get/?end=" + $scope.endDateTime + "&format=json&search=Search&start=" + $scope.startDateTime)
.then(function(response) {
var points = []
angular.forEach(response.data, function(value, key) {
console.log("Response: " + JSON.stringify(response))
points.push(new google.maps.LatLng(JSON.parse(JSON.stringify(value))["lat"], JSON.parse(JSON.stringify(value))["long"]))
});
d.resolve(points)
console.log("Points: " + points)
return d.promise;
});
}
});
并致电:
var points = [];
points = checkpointService($scope, $http)
points.then(function(){
heatmap = new google.maps.visualization.HeatmapLayer({
data: points,
map: $scope.map
})});
在本例中,错误改为“无法读取未定义的“then”属性”
我意识到也有类似的问题;我已经阅读了它们和文档。我仍在努力理解。我知道服务中的$http调用是成功的。但是,我相信heatmap数据参数中的点是空的。简单地说,该服务应该返回一组LatLng点来绘制热图。在您第一次接近时,您已经非常接近了
var traffic = angular.module('traffic', ['ngMap'])
.factory('checkpointService', function ($q) {
return function ($scope, $http) {
return $http.get("http://127.0.0.1:8000/traffic/get/?end=" + $scope.endDateTime + "&format=json&search=Search&start=" + $scope.startDateTime)
.then(function (response) {
var points = []
angular.forEach(response.data, function (value, key) {
console.log("Response: " + JSON.stringify(response))
points.push(new google.maps.LatLng(JSON.parse(JSON.stringify(value))["lat"], JSON.parse(JSON.stringify(value))["long"]))
});
//d.resolve(points)
console.log("Points: " + points)
return points;
});
}
});
checkpointService($scope, $http).then(function (points) {
heatmap = new google.maps.visualization.HeatmapLayer({
data: points,
map: $scope.map
});
});
我改变的是:
您不需要将
$http
包装在延迟
中,因为它已经返回承诺。问题是您在回调函数中声明了points[]
,但在承诺完成之前,尝试从外部函数返回它;回调尚未运行,无法访问点
。在大多数情况下,您会在服务中看到返回$http…
,并且变量分配在控制器中完成。这些注释也很有用。谢谢