2015-07-20 2 views
0

У меня есть код для проверки онлайн/оффлайн в моем приложении cordova.Cordova angular offline check

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

В Угловом контроллере в течение работает фаза вашего приложения. Вы можете выполнить некоторый код до этой фазы запуска, также называемый фазой конфигурации.

You shoudl читать 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 
}); 

Не уверен, что если я хорошо понимал, но это может позволить вам выполнить код перед запуском контроллера :)

Просто подумав о вашем коде ... config будет запускаться только один раз, и ваше соединение может меняться со временем (если в автомобиле, идущем от 4G до 3G). Поэтому, возможно, вам придется регулярно проверять или проверять ваш контроллер. Лучшим случаем может быть функция, которую вы вызываете при активации вашего контролера.