2014-12-04 23 views
9

Ho un'applicazione mobile basata su Cordova e Ionic. Sulla pagina predefinita che viene caricata dopo l'avvio dell'applicazione è necessario lavorare con il plugin SQLLite.Come deviceready in modo corretto nell'applicazione ionica?

https://github.com/brodysoft/Cordova-SQLitePlugin

Il problema è che vista contiene

ng-init="setData()" 

che chiede il metodo di controllo in cui viene lavorato con SQL Lite plugin. E poiché il metodo viene chiamato prima che l'evento deviceready non sia inizializzato (il plugin può essere inizializzato solo dopo l'evento deviceready).

Così ho provato questa soluzione:

.run(function($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); 
     db = window.sqlitePlugin.openDatabase({name:"callplanner"}); 
    } 

Ma questo non funziona per me.

Così ho provato seconda soluzione:

.factory('cordova', function() { 
    return { 
     test: function(){ 
      document.addEventListener("deviceready", this.ready, false); 
     }, 
     ready: function(){ 
      alert("Ready"); 
      db = window.sqlitePlugin.openDatabase({name:"callplanner"}); 
     } 

    } 
}) 

e controller init Ho provato:

cordova.test(); 

Ma questo non sta lavorando per (devicereadfy viene licenziato dopo NG-init).

Dopo che ho trovato questo articolo:

http://java.dzone.com/articles/ionic-and-cordovas-deviceready

Ma non ho capito come mettere "splash screen" prima app è pronta e come impostare il timeout.

Qualcuno ha idea di come posso risolvere questo problema?

Molte grazie per qualsiasi consiglio o aiuto.

+0

Nessuno sa come risolverlo? – redrom

risposta

15

È necessario invertire questo, prima si gestisce l'evento "deviceready" cordova e quindi si avvia l'app angularjs. Come questo:

  1. prima rimuovere l'attributo della ng-app dal tag html/corpo

  2. Avviare l'applicazione angolare dopo il devireready:

    <script> 
        document.addEventListener('deviceready', function() { 
        angular.bootstrap(document, ['YourAppName']); 
        }, false); 
        var YourAppName = angular.module('YourAppName', []); 
    </script> 
    

domande simili:

3

non ho potuto farlo funzionare con la soluzione @ t4deu, perché la mia tag ng-app era nel corpo, in modo da lasciare un piccolo cambiamento nel caso in cui aiuta a qualcuno.

<script> 
    document.addEventListener('deviceready', function() { 
     angular.bootstrap(document.querySelector('body'), ['starter']); 
    }, false); 

    </script> 
Problemi correlati