I am new to Angular / Ionic. Before using Angular / Ionic, when starting my application, I checked if we were in Phonegap or a browser, using and storing this information in a global logical variable, and then checking whether this application was online or offline, and saving its global variable, eg:
var isPhoneGap; var connectionStatus; isPhoneGap = checkIfPhoneGap(); //later in the code : connectionStatus = checkIfOnline(); function checkIfPhoneGap() { var app = document.URL.indexOf( 'http://' ) === -1 && document.URL.indexOf( 'https://' ) === -1; // && document.URL.indexOf( 'file://' ); if ( app ) { return true; } else { return false; } } function checkIfOnline() { if ( isPhoneGap ) { if (checkConnection() == "none" ) { connectionStatus = 'offline'; } else { connectionStatus = 'online'; } function checkConnection() { var networkState = navigator.network.connection.type; var states = {}; states[Connection.UNKNOWN] = 'Unknown connection'; states[Connection.ETHERNET] = 'Ethernet connection'; states[Connection.WIFI] = 'WiFi connection'; states[Connection.CELL_2G] = 'Cell 2G connection'; states[Connection.CELL_3G] = 'Cell 3G connection'; states[Connection.CELL_4G] = 'Cell 4G connection'; states[Connection.NONE] = 'No network connection'; //console.log('Connection : ' + Connection); //console.log('Connection type: ' + states[networkState]); return networkState; } } else { connectionStatus = navigator.onLine ? 'online' : 'offline'; } return connectionStatus; }
Now I would like to do the same with Angular / Ionic, I understand that I need to use the "Service". But the best way to make this information available through all the code?
I am doing the following, but is it "best practice"?
in index.html:
<script src="js/app.js"></script> <script src="js/controllers.js"></script> <script src="js/services.js"></script>
in services.js:
angular.module('SnowBoard.services', []) .factory('isPhoneGap', function() { var appp = document.URL.indexOf( 'http://' ) === -1 && document.URL.indexOf( 'https://' ) === -1; // && document.URL.indexOf( 'file://' ); if ( appp ) { return true; } else { return false; } }) ;
in app.js:
angular.module('SnowBoard', ['ionic', 'SnowBoard.controllers', 'SnowBoard.services']) .run(["isPhoneGap","$ionicPlatform", function(isPhoneGap, $ionicPlatform) { $ionicPlatform.ready(function() { // Hide the accessory bar by default (remove this to show the accessory bar above the keyboard // for form inputs) if(window.cordova && window.cordova.plugins.Keyboard) { cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true); } if(window.StatusBar) { // org.apache.cordova.statusbar required StatusBar.styleDefault(); } }); //CHECK IF ONLINE connectionStatus = checkIfOnline(isPhoneGap); //DEBUG //var debugOptionUseLocalDB=0; //updateProDB(connectionStatus, debugOptionUseLocalDB); }]) .config(function($stateProvider, $urlRouterProvider) { //...all state configurations }) .config(function($stateProvider, $urlRouterProvider) { //... });
Now it works, but I need the boolean isPhoneGap be available wherever I need it (almost everywhere in my application).
Can you converge on best practice for this?
thanks
angularjs ionic-framework
Louis
source share