我在指令中使用isoated范围。一切似乎都很好。我在两个属性上设置了=
范围,并在我的模板中绑定它们。然后,在我的控制器中,我调用我的服务,获取数据并将其推送到绑定的对象上。
真正摆脱我的是我可以记录并设置断点并且可以看到数据,但角度不会更新绑定(尽管它更新我的bool字段就好了。)
我提供了一个傻瓜: http://plnkr.co/edit/8sVwaea5Amqvf3yiI1Nm?p=preview
相关代码部分是:
if (navigator.geolocation) {
//navigator.geolocation.getCurrentPosition(success, fail);
$timeout(function() { success({testdata: "bogusdata"}) }, 1500);
} else {
fail({ error: "navigator.geolocation not available"});
}
显然,如果我使用我的$ timeout模拟,它可以正常工作。但是如果我替换了getCurrentPosition函数,没有任何更新(但它会记录)?!?!
帮助?
答案 0 :(得分:1)
实际上你只是对你试图处理数据的方式有问题 - Geolocation对象到达并正确地放在$scope
上,只有JSON.stringify
序列化它(看似不正确进入{}
。
您可以通过记录$scope.locationData.payload
来验证这一点 - 您将看到整个对象显示在控制台上,并且记录typeof $scope.locationData.payload.coords
显示object
,这意味着它在当时正确填充日志调用。 (记录对象本身不能证明这一点,因为console.log只记录对象引用,在手动扩展时异步访问它们)
这只是看似不正确,因为JSON.stringify
只应该记录对象的属性,而coords
和timestamp
不是此Geolocation对象的自有属性。 (尝试$scope.locationData.payload.hasOwnProperty('coords')
:它返回false
)
解决方法取决于您的确切需求。也许你甚至不需要解决方法,因为你可以访问这些数据,只是无法按照你想要的方式记录或字符串化。
其他资源:
以下是我发现的一篇博文文章,该文章遇到了同样的问题:Beware of JSON.stringify
这是一个stackoverflow帖子,解释了为什么这些属性不是Geolocation的拥有属性:JSON stringify / Geolocation object