2013-10-16 113 views
3

我正在通过添加事件侦听器来侦听失去网络连接的应用程序。AngularJS - 显示/隐藏Rootcope的元素

当应用程序离线时,我需要显示一条消息。

以下代码似乎不适用于我。

我添加事件侦听器中运行的应用程序的方法,使其全球可用:

document.addEventListener("offline", function() { 
    $rootScope.offline = true; 
}, false); 

然后在我的index.html我展示隐藏基于这样$ rootScope变量消息:

<div id="network-msg" ng-show="$root.offline"> 
    <div class="full-overlay" ng-show="$root.offline"> 
     <p class="txt-center">No internet connection</p> 
     <p class="txt-center">Trying to re-connect</p> 
    </div> 
</div> 

当我离线时,我可以看到varibale正在更新但消息不显示。所以,如果我输出:

{{$root.offline}} 

页面上,我可以看到它从假切换到真实正确,但仍然没有显示消息。

回答

8

由于该值在DOM事件处理程序更新,变化必须是$apply回调

document.addEventListener("offline", function() { 
    $rootScope.$apply(function(){ 
     $rootScope.offline = true; 
    }) 
}, false); 
+0

你能上标识的变化'NG-model'指令之间的差别阐述内完成,并这里需要'$ apply'吗?它也适用于我。我在'run'处理程序中设置了'$ rootScope。$ on',唯一可以让视图响应这个变化的方法就是使用这个。我通过调用'$ scope。$ emit' FYI来提出这个问题。 –

+1

@MichaelPerrenoud [见此](http://www.sitepoint.com/understanding-angulars-apply-digest/)和[this](https://docs.angularjs.org/api/ng/type/$rootScope .Scope#$ digest)得到关于为什么[$ apply](https://docs.angularjs.org/api/ng/type/$rootScope.Scope#$apply)需要的基本想法 –

+0

@MichaelPerrenoud不确定你可以用'$ on()'和'$ emit()'来解决问题,如果可能的话,尝试在[fiddle]中重新创建问题(http://jsfiddle.net/arunpjohny/ CNNRp /) –