隔离范围 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
只应该记录一个对象自己的属性,而 coords
和 timestamp
不是这个 Geolocation 对象自己的属性。 (尝试$scope.locationData.payload.hasOwnProperty('coords')
: 它returns false
)
解决方法将取决于您的具体需要。也许您甚至不需要解决方法,因为您可以访问此数据,只是无法按照您想要的方式记录或字符串化它。
其他资源:
这是我发现的一篇遇到同样问题的博客文章:Beware of JSON.stringify
这里有一个 Whosebug post 解释了为什么这些属性不是 地理定位的属性:JSON stringify / Geolocation object
我在指令中使用隔离作用域。一切似乎都很好。我在两个属性上设置了一个 =
范围,并在我的模板中绑定到它们。然后,在我的控制器中调用我的服务,获取数据并将其推送到绑定对象上。
真正让我烦恼的是我既可以记录也可以设置断点并且可以看到数据,但是 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
只应该记录一个对象自己的属性,而 coords
和 timestamp
不是这个 Geolocation 对象自己的属性。 (尝试$scope.locationData.payload.hasOwnProperty('coords')
: 它returns false
)
解决方法将取决于您的具体需要。也许您甚至不需要解决方法,因为您可以访问此数据,只是无法按照您想要的方式记录或字符串化它。
其他资源:
这是我发现的一篇遇到同样问题的博客文章:Beware of JSON.stringify
这里有一个 Whosebug post 解释了为什么这些属性不是 地理定位的属性:JSON stringify / Geolocation object