隔离范围角度绑定未从地理位置更新

时间:2015-09-04 22:05:23

标签: javascript angularjs navigator isolate-scope

我在指令中使用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函数,没有任何更新(但它会记录)?!?!

帮助?

1 个答案:

答案 0 :(得分:1)

实际上你只是对你试图处理数据的方式有问题 - Geolocation对象到达并正确地放在$scope上,只有JSON.stringify序列化它(看似不正确进入{}

您可以通过记录$scope.locationData.payload来验证这一点 - 您将看到整个对象显示在控制台上,并且记录typeof $scope.locationData.payload.coords显示object,这意味着它在当时正确填充日志调用。 (记录对象本身不能证明这一点,因为console.log只记录对象引用,在手动扩展时异步访问它们)

这只是看似不正确,因为JSON.stringify只应该记录对象的属性,而coordstimestamp不是此Geolocation对象的自有属性。 (尝试$scope.locationData.payload.hasOwnProperty('coords'):它返回false

解决方法取决于您的确切需求。也许你甚至不需要解决方法,因为你可以访问这些数据,只是无法按照你想要的方式记录或字符串化。

其他资源: