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

isolate scope angular binding not updated from geolocation

我在指令中使用隔离作用域。一切似乎都很好。我在两个属性上设置了一个 = 范围,并在我的模板中绑定到它们。然后,在我的控制器中调用我的服务,获取数据并将其推送到绑定对象上。

真正让我烦恼的是我既可以记录也可以设置断点并且可以看到数据,但是 angular 不更新绑定(尽管它更新了我的 bool 字段就好了) .

我提供了一个plunkr: 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 函数,则没有任何更新(但它确实记录)?!?!

帮忙?

实际上,您只是尝试处理数据的方式有问题 - Geolocation 对象到达并正确放置在 $scope 上,只是 JSON.stringify 序列化了它(似乎不正确)变成 {}.

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

这只是表面上不正确,因为 JSON.stringify 只应该记录一个对象自己的属性,而 coordstimestamp 不是这个 Geolocation 对象自己的属性。 (尝试$scope.locationData.payload.hasOwnProperty('coords'): 它returns false)

解决方法将取决于您的具体需要。也许您甚至不需要解决方法,因为您可以访问此数据,只是无法按照您想要的方式记录或字符串化它。

其他资源:

  • 这是我发现的一篇遇到同样问题的博客文章:Beware of JSON.stringify

  • 这里有一个 Whosebug post 解释了为什么这些属性不是 地理定位的属性:JSON stringify / Geolocation object