2014-12-04 3 views
9

У меня есть мобильное приложение на основе Cordova и Ionic. На странице по умолчанию, загруженной после запуска приложения, необходимо работать с плагином SQLLite.Как Deviceready в правильном направлении в ионном приложении?

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

Проблема заключается в том, что представление содержит

ng-init="setData()" 

Который звонит метод контроллера, где работал с SQL Lite плагин. И из-за метода вызывается до того, как событие deviceready не инициализируется (плагин может быть инициализирован только после события deviceready).

Так что я попробовал этот обходной путь:

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

Но это не работает для меня.

Так я попробовал второе решение:

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

    } 
}) 

и контроллер инициализации я пробовал:

cordova.test(); 

Но это не работает в (devicereadfy обжигают после нг-инициализации).

После того, что я нашел эту статью:

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

Но я не понимаю, как поставить «заставку экрана» перед приложение готово и как установить тайм-аут.

У кого-нибудь есть идея, как я могу решить эту проблему?

Большое спасибо за любые советы или помощь.

+0

Никто не знает, как его решить? – redrom

ответ

15

Вам нужно инвертировать это, сначала вы обрабатываете событие «deviceready» cordova, а затем запускаете приложение angularjs. Как это:

  1. Сначала снимите атрибут НГ-приложение из тега HTML/тела

  2. Пуск угловое приложение после devireready:

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

Похожие вопросы:

3

Я не мог заставить его работать с раствором @ t4deu, потому что мой нг-приложение тег был в теле, так что я оставил небольшое изменение в случае, если это помогает кому-то.

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

    </script> 
Смежные вопросы