我一直试图解决这个问题但没有成功。我知道getCurrentPosition()返回一个promise,并且在.then()函数中调用$ scope.map.center会起作用。我也理解$ scope在摘要周期中运行,当promise解析时,它的属性和对象会更新。我是这一切的新手,我希望我有意义。
那就是说,我非常想了解正在发生什么,因为console.log($ scope.map)按预期工作,{{map.center}}按预期显示,但是console.log(地图) .center)返回.then()函数之外的空对象。
预先感谢您的协助!
$scope.map = {
control: {},
center: {},
zoom: 16
};
$geolocation.getCurrentPosition({
timeout: 60000,
maximumAge: 250,
enableHighAccuracy: true
}).then(function(position) {
$scope.map.center.latitude = position.coords.latitude;
$scope.map.center.longitude = position.coords.longitude;
});
//Output
console.log($scope.map); //returns full object including data within $scope.map.center
console.log($scope.map.center); //returns an empty object. I am looking to convert this to an array using lodash.

{{ map.center }} works fine and returns the coordinates of my current location

**编辑(控制台的上传图像)**
This is what I see in the console. First object is $scope.map Second object is $scope.map.center
答案 0 :(得分:0)
getCurrentPosition()
调用是异步的。因此,您对日志$scope.map
和$scope.map.center
的调用只会返回您最初定义的内容。
只有在ajax调用结束时才会在范围内设置数据。
答案 1 :(得分:0)
当getCurrentPosition完成时(它是异步的)调用then函数并将数据发送回客户端。它是唯一可以可靠地访问由其检索的数据的地方。如果要进行异步调用,则必须使用then函数来访问数据。那就是打电话后发生的事情。在调用getCurrentPosition之后立即执行then(函数外部)后面的代码 - 而不是在它完成时执行。
如果你只是在寻找一个不同的位置放置这个代码,你可以从then函数调用另一个函数,并将位置对象传递给它。
$scope.map = {
control: {},
center: {},
zoom: 16
};
$geolocation.getCurrentPosition({
timeout: 60000,
maximumAge: 250,
enableHighAccuracy: true
}).then( processMap(position))
function processMap(position) {
$scope.map.center.latitude = position.coords.latitude;
$scope.map.center.longitude = position.coords.longitude;
console.log($scope.map);
console.log($scope.map.center);
};
如果您正在寻找有关异步电话的更多信息,请参阅以下说明:
http://docs.apigee.com/api-baas/asynchronous-vs-synchronous-calls