2014-12-04 36 views
9

我有基於Cordova和Ionic的移動應用程序。在應用程序啓動後加載的默認頁面需要使用SQLLite插件。如何在Ionic應用程序中以正確的方式進行Deviceready?

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

問題是,視圖包含

ng-init="setData()" 

這是調用在其中與SQL精簡版插件工作的控制器方法。並且由於該方法在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是NG-初始化後,解僱)。

之後,我發現這篇文章:

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

,但我不知道如何把「閃屏」之前的應用程序已經準備好,以及如何設置超時。

有人想法我該如何解決這個問題?

很多感謝您的任何建議或幫助。

+0

沒有人知道如何解決它? – redrom 2014-12-04 19:33:01

回答

15

您需要反轉此操作,首先處理cordova「deviceready」事件,然後啓動angularjs應用程序。就像這樣:

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

類似的問題:

  1. 首先從HTML/body標籤

  2. 啓動devireready后角應用中移除了NG-應用屬性:

3

我不能使它與@ t4deu解決方案的工作,因爲我的NG-app標記在身,所以我離開的情況下,一點點的變化,它可以幫助別人。

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

    </script> 
相關問題