如何在AngularJs中检查互联网连接

Upv*_*ote 51 angularjs

这就是我在vanilla javascript中检查互联网连接的方法:

setInterval(function(){
    if(navigator.onLine){
        $("body").html("Connected.");
    }else{
        $("body").html("Not connected.");
    }
},1000);
Run Code Online (Sandbox Code Playgroud)

我的项目中有角度控制器和模块.我应该把代码放在哪里?它应该在全局上下文中执行,而不是分配给某个控制器.是否有某种全球控制器?

Val*_*nov 146

首先,我建议你听在线/离线活动.

你可以在AnguarJS中这样做:

var app = module('yourApp', []);

app.run(function($window, $rootScope) {
      $rootScope.online = navigator.onLine;
      $window.addEventListener("offline", function() {
        $rootScope.$apply(function() {
          $rootScope.online = false;
        });
      }, false);

      $window.addEventListener("online", function() {
        $rootScope.$apply(function() {
          $rootScope.online = true;
        });
      }, false);
});
Run Code Online (Sandbox Code Playgroud)

注意:我在$apply方法中包装更改根范围的变量,以通知Angular某些内容已更改.

之后你可以:

在控制器中:

$scope.$watch('online', function(newStatus) { ... });
Run Code Online (Sandbox Code Playgroud)

在HTML标记中:

 <div ng-show="online">You're online</div>
 <div ng-hide="online">You're offline</div>
Run Code Online (Sandbox Code Playgroud)

这是一个有效的Plunker:http://plnkr.co/edit/Q3LkiI7Cj4RWBNRLEJUA?p =preview

其他解决方案可能是广播在线/离线事件.但在这种情况下,您需要在加载时初始化当前状态,然后订阅事件.

  • **警告:这只会检查您的计算机是否已连接到网络,而不是您实际上是否在线.** (10认同)
  • 不工作铬.我打开了plunker,我显示`online:true`然后我关闭了我的wifi,它仍然显示`online:true`. (6认同)
  • 请注意,这在FireFox中不起作用.他们选择以不同于其他所有浏览器的方式实现navigator.onLine,这对于想要开发离线应用程序的开发人员来说真是太麻烦了. (3认同)

Jon*_*ott 18

它绝对不是那么好,但您可以尝试向您的Web服务器发出AJAX请求; 它会成功还是超时.

此外,HubSpot /离线项目看起来非常好.