隔离未从地理位置更新的作用域角绑定
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函数,没有更新(但它做日志)?
帮助吗?
实际上你只是有一个问题,你试图处理数据的方式-地理位置对象到达并正确地放在$scope
上,这只是JSON.stringify
序列化它(看似不正确)到{}
。
您可以通过记录$scope.locationData.payload
来验证这一点—您将看到整个对象出现在控制台中,记录typeof $scope.locationData.payload.coords
显示object
,这意味着它在日志调用时被正确填充。(记录对象本身并不能证明这一点,因为console.log只是记录对象引用,当您手动展开它们时异步访问它们)
这只是看起来不正确,因为JSON.stringify
只应该记录对象的自身属性,而coords
和timestamp
不是该Geolocation对象的自身属性。(尝试$scope.locationData.payload.hasOwnProperty('coords')
:它返回false
)
解决方法将取决于您的确切需求。也许你甚至不需要变通,因为你可以访问这些数据,只是不能按你想要的方式记录或字符串化它。
额外的资源:
-
这是我发现的一篇遇到同样问题的博客文章:小心JSON.stringify
-
这是一个stackoverflow的帖子,解释了为什么这些属性不是自己的属性:JSON stringify/Geolocation object
- 将作用域绑定到事件处理程序,但保留原始参数
- 将回调绑定到没有隔离作用域的指令
- 隔离作用域+绑定名称和仅在AngularJS中的隔离作用域之间的差异
- 通过json动态绑定作用域到ng模型
- 为什么Angular 1.5双向绑定在将作用域变量传递给组件绑定时失败
- 修改作用域变量后,未更新作用域绑定
- AngularJS$作用域包括我的绑定变量,但以后仍然无法访问,为什么
- AngularJS:图片上传+文件阅读器预览.控制器、指令和作用域之间的绑定出现问题
- 将内部作用域变量绑定到外部“模板”
- 角度指令作用域绑定在 ng-repeat中不起作用
- 将 http GET 响应与 ngRepeat 中的隔离作用域绑定
- 在 $scope.$watch 中更新时,独立作用域绑定不起作用
- 从作用域绑定的动态控制器
- 工厂中与控制器作用域绑定的已修改数据不会更新
- dom内部的指令作用域绑定不起作用
- Angular js用全局作用域绑定局部数组
- 如何使用interval将angular作用域绑定到web worker的结果
- 在角树控件中将数据从父作用域绑定到节点中的元素
- 角作用域绑定
- Javascript自定义作用域绑定函数