2015-07-20 85 views
0

我有以下代碼來在線/離線檢查我的cordova應用程序。Cordova角度離線檢查

var networkState = navigator.connection.type; 

var states = {}; 
states[Connection.UNKNOWN] = 'Unknown'; 
states[Connection.ETHERNET] = 'Ethernet'; 
states[Connection.WIFI]  = 'WiFi'; 
states[Connection.CELL_2G] = 'Cell2G'; 
states[Connection.CELL_3G] = 'Cell3G'; 
states[Connection.CELL_4G] = 'Cell4G'; 
states[Connection.CELL]  = 'Cellgeneric'; 
states[Connection.NONE]  = 'Nonetwork'; 
alert(states[networkState]); 
if(states[networkState]!='Nonetwork'){ 
online=true; 
}else{ 
online=false; 
} 

而我的角度控制器就像下面。

.controller('MainCtrl',['$scope','$http','$localStorage','$state',function($scope, $http, $localStorage, $state){ 


    if(online==true){ 

    //code for online 
    }else{ 
    // code for offline 
    } 


}]) 

我叫「deviceready」事件的檢查,狀態得到。但我的問題是 - deviceready被稱爲後我控制器started.is可以檢查網絡狀態前角控制器開始執行的?

+0

在你的例子中,我看不到'deviceready'被調用的地方。可能會有一些元素缺失。你在哪裏叫第一塊代碼檢查網絡? – sebastienbarbier

回答

0

在Angular中,控制器在您的應用程序的運行階段的期間執行。您可以在該運行階段之前執行一些代碼,也稱爲配置階段

你應該從角度閱讀module documentation

  • 配置塊 - 在供應商登記和配置階段得到執行。只有提供者和常量 可以注入到配置塊中。這是爲了防止 在完全配置完成 之前意外實例化服務。

  • 運行塊 - 在創建注入器後執行並用於啓動應用程序。只有實例和常量可以注入到運行塊中 。這是爲了防止在應用程序運行時進一步配置系統 。

在你的代碼,它應該是這樣的:如果

angular.module('myModule', []). 
config(function(injectables) { // provider-injector 
    // This is an example of config block. 
    // You can have as many of these as you want. 
    // You can only inject Providers (not instances) 
    // into config blocks. 
}). 
run(function(injectables) { // instance-injector 
    // This is an example of a run block. 
    // You can have as many of these as you want. 
    // You can only inject instances (not Providers) 
    // into run blocks 
}); 

不知道我的理解很好,但是,很可能讓你運行你的控制器:)

前執行代碼只是想着你的代碼...配置將只運行一次,並且你的連接可以隨着時間而改變(如果在汽車中,從4G到3G)。所以可能需要檢查regularely或檢查您的控制器。最好的情況可能是您在控制器激活時調用的函數。