【发布时间】:2016-10-08 08:41:08
【问题描述】:
我正在加载谷歌地图,当我导航到 /map 时,它会加载标记以填充地图。问题是其余的 javascript 在标记加载之前运行和执行。我认为解决它的方法是在工厂中返回一个检索地图数据的承诺。但这不起作用。
谁能告诉我我做错了什么?
在控制台中我看到了这个:
angular.js:13920 TypeError: Cannot read property 'lat' of undefined
at Object.link (http://localhost/logintest/js/app.js:586:55)
第 586 行引用此行(在指令中):
center: new google.maps.LatLng(lastElement.lat, lastElement.lon),
我得到lastElement 像这样:
var lastElement = scope.arrLocations[scope.arrLocations.length - 1];
工厂:
app.factory('map', ['$q', function($q){
var map={};
var mapInfoItems=[];
map.getMapInfo = function() {
var deferred = $q.defer();
var mapitems = firebase.database().ref('mapinfo/'+firebase.auth().currentUser.uid);
mapitems.on('child_added', function(snapshot){
mapInfoItems.push(snapshot.val());
deferred.resolve(mapInfoItems);
});
return deferred.promise;
};
return map;
}]);
控制器:
app.controller('mapController', ['$scope', 'map', function($scope, map){
$scope.myLocations = {};
$scope.arrLocations = [];
$scope.mapLocations = map.getMapInfo();
for(var i=0; i<$scope.mapLocations.length; i++){
$scope.myLocations.title = $scope.mapLocations[i].name;
$scope.myLocations.content = $scope.mapLocations[i].message;
$scope.myLocations.lat = $scope.mapLocations[i].lat;
$scope.myLocations.lon = $scope.mapLocations[i].lon;
$scope.arrLocations.push($scope.myLocations);
}
}]);
html:
<div ng-controller="mapController">
<my-map get-map-fn="getMap()"></my-map>
</div>
【问题讨论】:
-
控制台说什么?
-
我添加了更多细节。
-
好的,
arrLocations的创建有问题。让我们在控制台中记录前面的步骤,看看它是什么样子的。也许console.log($scope.myLocations);