我正在尝试创建一个地图并用角度标记填充它并且进展顺利。现在我尝试将经度和经度给予函数返回的$ cope.map的中心。我怎么能这样做?函数当前返回' Undefined'这是为什么??有更好的方法吗?我很久以前就陷入了困境,而且我很有新意。你能帮我吗?请?下面是我的代码。
var appa = angular.module('appa',['firebase','uiGmapgoogle-maps']);
appa.controller('mainCtrl', function($firebaseObject,$scope) {
$scope.coords = function(){
var ref = firebase.database().ref();
var latArray = [];
var lngArray = [];
var cenlat;
var cenlng;
var marker = [];
ref.once("value")
.then(function(snapshot)
{
snapshot.forEach(function(child){
latArray.push(child.child("Lat").val());
lngArray.push(child.child("Long").val());
var mark = {
id: child.child("Id").val(),
coords: {
latitude: child.child("Lat").val(),
longitude: child.child("Long").val()
},
options: { title: child.child("Alt").val() }
};
marker.push(mark);
});
cenlat = (Math.max.apply(Math,latArray)+Math.min.apply(Math,latArray)/2);
cenlng = (Math.max.apply(Math,lngArray)+Math.min.apply(Math,lngArray)/2);
});
$scope.map.moo = cenlat;
};
$scope.map = {
moo: "0",
center:
{
latitude: $scope.map.moo, longitude: 4 },
zoom: 2
};
$scope.coords();
});

答案 0 :(得分:1)
欢迎来到js的异步闭包世界:)
return ref.once("value")
并将它带到你需要的地方
$scope.map = {};
// invoke
$scope.coords().then(function(snapshot){
// ...
$scope.map.moo = cenlat;
});
或
给它一个回调参数
$scope.coords = function(callback){
ref.once("value").then(callback);
}
$scope.map = {
// ...
};
// invoke
$scope.coords(function(snapshot){
// ...
$scope.map.moo = cenlat;
});
或实际上是您的代码:
$scope.map = {};
$scope.coords = function(){
ref.once("value").then(function(snapshot) {
// ...
$scope.map.moo = cenlat;
}
}
关于你的上一个问题
$scope.coords = function(){
ref.once("value").then(function(snapshot) {
// ...
$scope.map.center.latitude = cenlat;
}
}
$scope.map = {
center: {
longitude: 4
},
zoom: 2
};
$scope.coords()