如何在Ionic应用程序中以正确的方式准备好?

red*_*rom 9 javascript android angularjs cordova ionic-framework

我有基于Cordova和Ionic的移动应用程序.在应用程序启动后加载的默认页面需要使用SQLLite插件.

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

问题是该视图包含

ng-init="setData()"
Run Code Online (Sandbox Code Playgroud)

这是调用控制器方法在哪里使用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"});
    }
Run Code Online (Sandbox Code Playgroud)

但这不适合我.

所以我试过第二个解决方案

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

  }
})
Run Code Online (Sandbox Code Playgroud)

并在控制器初始化我试过:

cordova.test();
Run Code Online (Sandbox Code Playgroud)

但这不起作用(在ng-init之后触发devicereadfy).

之后我发现了这篇文章:

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

但我不明白如何在应用程序准备好之前放置"启动画面"以及如何设置超时.

有人知道如何解决这个问题?

非常感谢您的任何建议或帮助.

T4d*_*deu 15

你需要反转它,首先你处理cordova"deviceready"事件然后你启动angularjs应用程序.像这样:

  1. 首先从html/body标签中删除ng-app属性

  2. 在devireready之后启动角度应用程序:

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

类似的问题: