2014-12-04 13 views
9

Mam aplikację mobilną na bazie Cordova i ionic. Na domyślnej stronie, która jest ładowana po uruchomieniu aplikacji, należy pracować z wtyczką SQLLite.Jak prawidłowo używać Deviceready w aplikacji jonowej?

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

Problem jest to, że widok zawiera

ng-init="setData()" 

Która jest wywołanie metody kontrolera gdzie pracował z wtyczką SQL Lite. A ponieważ metoda jest wywoływana, zanim zdarzenie deviceready nie zostanie zainicjowane (wtyczka może zostać zainicjowana dopiero po zdarzeniu deviceready).

Więc próbowałem tego obejścia:

.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"}); 
    } 

Ale to nie działa dla mnie.

więc próbowałem drugie rozwiązanie:

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

    } 
}) 

i kontrolera init, próbowałem:

cordova.test(); 

Ale to nie działa do (devicereadfy jest zwolniony po NG-pliku init).

Potem znalazłem ten artykuł:

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

Ale ja nie rozumiem, w jaki sposób umieścić „ekran powitalny” zanim aplikacja jest gotowa i jak ustawić limit czasu.

Masz pomysł, jak rozwiązać ten problem?

Wielkie dzięki za radę lub pomoc.

+0

Nikt nie wie, jak go rozwiązać? – redrom

Odpowiedz

15

Musisz to zmienić, najpierw musisz obsługiwać zdarzenie "deviceready", a następnie uruchomić aplikację angularjs. Tak:

  1. Najpierw usunąć atrybut NG-app ze znacznika html/ciała

  2. start kątowa aplikacja po devireready:

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

Podobne pytania:

3

nie mogłem pracować z roztworem @ t4deu, ponieważ mój ng-app tag był w ciele, więc zostawiam małą zmianę w przypadku, że przyczynia się do kogoś.

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

    </script> 
Powiązane problemy