У меня есть код ниже, чтобы проверить онлайн/оффлайн в моем приложении 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
вызывается после запуска моего контроллера. Можно ли проверить состояние сети до запуска углового контроллера?
В режиме "Угловая" контроллер выполняется на этапе запуска вашего приложения. Вы можете выполнить некоторый код перед этой фазой, также называемой фазой конфигурации.
Вы shoudl читаете документацию модуля от углового.
Блоки конфигурации - выполняются во время регистрации и конфигурации поставщика. В конфигурационные блоки могут быть введены только поставщики и константы. Это делается для предотвращения случайного создания служб, прежде чем они будут полностью настроены.
Запускать блоки - выполняться после создания инжектора и использоваться для запуска приложения. Только экземпляры и константы могут быть введены в блоки запуска. Это необходимо для предотвращения дальнейшей конфигурации системы во время работы приложения.
В вашем коде это должно выглядеть так:
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). Поэтому, возможно, вам придется регулярно проверять или проверять ваш контроллер. Лучшим случаем может быть функция, которую вы вызываете при активации вашего контролера.
deviceready
. Может быть, некоторые элементы отсутствуют. Где вы называете первый блок проверки кода сети?