隔离未从地理位置更新的作用域角绑定

isolate scope angular binding not updated from geolocation

本文关键字:作用域 绑定 更新 地理位置 隔离      更新时间:2023-09-26

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

真正让我抓狂的是,我可以记录和设置断点,并且可以看到数据,但是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函数,没有更新(但它做日志)?

帮助吗?

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

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

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

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

额外的资源:

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

  • 这是一个stackoverflow的帖子,解释了为什么这些属性不是自己的属性:JSON stringify/Geolocation object