3

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

真正让我感到困惑的是,我既可以记录也可以设置断点,还可以查看数据,但是 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 函数,则没有任何更新(但它会记录)?!?!

帮助?

4

1 回答 1

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

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

其他资源:

于 2015-09-04T22:41:33.923 回答