【发布时间】:2017-11-30 04:44:22
【问题描述】:
我正在构建一个需要检测用户何时失去互联网连接或无法访问服务器的应用。多个控制器和服务需要能够检查和设置它。我已经使用 Angular 服务毫无问题地实现了所有这些,并且
window.addEventListener('offline', function() {OfflineService.checkIfOnline});
然后在服务中使用类似的东西
window.navigator.onLine ? online = true : online = false
当我需要在离线事件发生时更新视图时,棘手的部分就出现了。当服务属性被事件更新时,我似乎找不到更新范围属性或控制器属性的方法。
当我使用 $scope.$watch 时,函数会触发 10 次(由 console.log 记录),然后再也不会触发。
我试图在 jsfiddle 中复制问题,但这是我第一次使用该工具,我不确定我是否做对了:
https://jsfiddle.net/m3nx5yLm/1/
感谢您的帮助。
【问题讨论】:
-
手表会触发 10 次,因为那是 Angular 的摘要。对于任何与视图相关的更新,您无需进行任何监视:只需将值引用到范围(或控制器的“this”)即可。只要它绑定到控制器,视图就会在更改时自动更新...除非您使用
::绑定值。无论如何,相关服务、控制器和 html 结构将不胜感激。 -
@briosheje 我也尝试将值绑定到控制器,但我不知道如何在服务属性更新时更新控制器属性。您是否看到了您所要求的相关信息的小提琴,还是我需要让小提琴更详细?
-
@SeanIvins 小提琴是空的。在任何情况下,您都应该将属性绑定到 service 本身,这样当角度控制器使用它时,它会自动更新。您可以遵循的最佳方法是将此类服务属性绑定到
rootScope,以便每个范围都可以轻松继承它。不要为每个控制器初始化控制器变量:尝试从上面共享它,这样您就不必再担心问题了;) -
@briosheje Oops 用我的更改更新了小提琴jsfiddle.net/m3nx5yLm/1 和jsfiddle.net/m3nx5yLm/2 显示我尝试使用 $rootScope 而不先查看文档(现在就这样做)。看到 jsfiddle 后的任何见解都值得赞赏。再次感谢
标签: javascript angularjs typescript