我有基于Cordova和Ionic的移动应用程序。在应用程序启动后加载的默认页面上,需要使用SQLLite插件。
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();
但这不起作用(ng-init之后会触发devicereadfy)。
之后,我找到了这篇文章:
http://java.dzone.com/articles/ionic-and-cordovas- deviceready
但是我不明白如何在应用就绪之前放置“启动画面”以及如何设置超时时间。
有人知道我该如何解决这个问题?
非常感谢您的任何建议或帮助。
您需要将其反转,首先处理cordova“ deviceready”事件,然后启动angularjs应用程序。像这样:
首先,从html / body标签中删除ng-app属性
devireready准备就绪后启动angular应用程序:
<script> document.addEventListener('deviceready', function() { angular.bootstrap(document, ['YourAppName']); }, false); var YourAppName = angular.module('YourAppName', []); </script>