2013-10-16 71 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 /) –