AngularJS:访问嵌套在 $scope 中的对象
Posted
技术标签:
【中文标题】AngularJS:访问嵌套在 $scope 中的对象【英文标题】:AngularJS: Accessing an object nested within $scope 【发布时间】:2016-05-31 22:40:35 【问题描述】:我一直在尝试解决这个问题,但没有成功。我知道 getCurrentPosition() 返回一个承诺并在 .then() 函数中调用 $scope.map.center 将起作用。我也明白 $scope 在摘要循环中运行,并且它的属性和对象在承诺解决时更新。我对这一切都很陌生,我希望我是有道理的。
也就是说,我很想了解发生了什么,因为 console.log($scope.map) 按预期工作, map.center 按预期显示,但 console.log(map.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
【问题讨论】:
【参考方案1】:当 getCurrentPosition 完成时调用 then 函数(它是异步的)并将数据发送回客户端。这是您可以可靠地访问由它检索到的数据的唯一地方。如果要进行异步调用,则必须使用 then 函数来访问数据。 THEN 是调用后发生的事情。 then(函数外部)之后的代码在调用 getCurrentPosition 后立即执行,而不是在它完成时执行。
如果你只是想找一个不同的地方来放置这段代码,你可以在 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
【讨论】:
感谢您的详细解答!如果我在您的解释中遗漏了它,请原谅我,但我想知道为什么 $scope.map 首先起作用。 它要么真的没有,你只是得到你在控制器函数顶部创建的对象,要么调用可能部分完成。 在做了更多检查之后,我现在认为这与 html5 Geolocation 返回一个称为坐标的特殊对象类型有关。这将满足我现在的好奇心。但是,我可能错了。【参考方案2】:getCurrentPosition()
调用是异步的。因此,您对记录 $scope.map
和 $scope.map.center
的调用只会返回您最初定义的任何内容。
只有 ajax 调用结束时,才会在作用域内设置数据。
【讨论】:
您说他们都应该返回我最初定义的内容。我对记录 $scope.map 的调用返回了完整的对象(包括保存在 $scope.map['center'] 中的坐标)。另一方面,我对 $scope.map.center 的调用返回了一个空对象。这就是困扰我的地方。如果两个都返回空对象,我会很好。 @nubianrover 看起来您还需要致电$apply
以确保更改反映在范围中。 ***.com/questions/23185619/…以上是关于AngularJS:访问嵌套在 $scope 中的对象的主要内容,如果未能解决你的问题,请参考以下文章
如何在 angularjs ui-router 中的状态之间共享 $scope 数据?
如何在angularjs ui-router中的状态之间共享$ scope数据?