Arbeiten Sie mit ngCordova in Cordova-Anwendungen

    Guten Tag an alle.

    Es gibt eine Anwendung, die in ionischer Sprache und mit Cordova geschrieben wurde. Das Wesentliche der Anwendung besteht darin, einige Informationen von der Site anzuzeigen.
    Da ist nichts kompliziertes. Es besteht auch eine Internetabhängigkeit. Wenn das Internet verfügbar ist, zeigen Sie die neuesten Daten von der Site an, andernfalls müssen Sie die Daten bei der Freigabe „verkabelt“ an die Anwendung ausgeben. Das war ein Wunsch.
    Probleme traten auf, als die Verfügbarkeit des Internets auf dem Gerät ermittelt werden musste.


    Dieser Artikel ist nicht die einzig wahre Lösung des Problems. Dies ist nur meine Implementierung. Ich konnte keine kompetentere Lösung finden. Daher ist es die Hauptaufgabe meines Beitrags, zu zeigen, wie das Problem von mir implementiert wurde, und es ist möglich, die Kommentare / Vorschläge / Ratschläge anderer Personen zu lesen. Das hilft mir persönlich und anderen - bei der Lösung solcher Probleme.

    Die Anwendung besteht aus einem Hauptbildschirm und zwei Optionen für sekundäre Bildschirme. Beim Ändern der Route und Laden der Seite wird der Auflösungsblock ausgeführt , der die Daten vollständig empfängt und dann die Seite anzeigt.

    .config(function($stateProvider, $urlRouterProvider) {
            $stateProvider.state('main', {
                url: '/',
                templateUrl : "views/main.html",
                controller : "MainController",
                resolve :{
                    homepageData : function (appService){
                        return appService.getMainData();
                    }
                    ...
                }
            });
            ...
    });
    


    Um Informationen über den Zustand des Internets zu erhalten, habe ich zu Beginn die übliche Variable in true | verwendet falsch

    Alles hat perfekt funktioniert. Und hier ist der letzte Akkord - Sie müssen herausfinden, ob das Internet auf dem Gerät vorhanden ist oder nicht. Da ich keine Entwicklungserfahrung in dieser Richtung habe, muss ich es aber machen! Ich fing an zu googeln. Ich habe die ngCordova-Bibliothek gefunden, die die Beziehung zur Cordova-API über die vertrauten angular.js implementiert. Ich benötige diese Informationen (über das Internet) in der Phase der Verarbeitung von Routen. Aber wo immer ich versuchte, diesen Code einzufügen, funktionierte nichts. Wie gesagt: Gerät nicht bereit.

    Hier ist ein Beispiel für einen der Versuche.

    ...
    .run(function($ionicPlatform, $rootScope, $cordovaNetwork) {
            $ionicPlatform.ready(function() {
                if(window.cordova && window.cordova.plugins.Keyboard) {
                    cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true);
                }
                if(window.StatusBar) {
                    StatusBar.styleDefault();
                }
                //$rootScope.internetAccess = true;
                $rootScope.internetAccess =  $cordovaNetwork.isOnline();
            });
        });
    

    Und wie gesagt: Fehler Gerät nicht bereit. Wieder in Google waren diese Lösungen (für die Arbeit mit ngCordova), die ich gefunden habe, für andere Plugins oder funktionierten überhaupt nicht. Versuche, am Beispiel anderer Plugins zu arbeiten, sind fehlgeschlagen.

    Die Lösung bestand darin, der Anwendung viele Versprechungen zu machen ... (: Und es hat funktioniert. Indem ich die Berge des Goldes versprochen habe, hat es (die Anwendung) mir geglaubt und sie verdient. Die
    Versprechungen sahen folgendermaßen aus:

    In Entschlossenheit:
    ...
    resolve :{
                    homepageData : function (appService, $cordovaNetwork){
                        return appService.getMainData().then(function(data){
                            return data;
                        });
                    },
                    ....
                }
    ..
    


    und Funktion im Service

             angular.module('myModule').factory('appService', function($q, $http, config_data, $injector, $ionicPlatform) {
        var appData = {
            getMain : function() {
                var defer = $q.defer();
                $ionicPlatform.ready(function(){
                    var cordovaNetwork = $injector.get('$cordovaNetwork');
                    if(!cordovaNetwork.isOnline()){
                        defer.resolve($http({ method: 'GET', url: config_data.API_HOST + config_data.JSON_PREFIX + 'main.json' }).success(function(data, status, headers, config) {
                            return data;
                        }));
                    }else{
                        defer.resolve($http({ method: 'GET', url: 'json/' + config_data.JSON_OFFLINE_PREFIX + 'main.json' }).success(function(data, status, headers, config) {
                            return data;
                        }));
                    }
                });
                return defer.promise;
            },
        ...
        }
        return appData;
    });
    


    Ich bin sicher, dass die Lösung wahrscheinlich nicht die schönste und korrekteste ist, aber sie funktioniert. Ich würde gerne andere Gedanken und Meinungen lesen.

    Jetzt auch beliebt: