我有Cordova和Ionic的移动应用.在应用程序启动后加载的默认页面需要使用sqlLite插件.
https://github.com/brodysoft/Cordova-SQLitePlugin
问题是视图包含
ng-init="setData()"
这是调用控制器方法,它与sql Lite插件一起使用.而且由于该方法是在设备发生事件未被初始化之前调用的(插件只能在设备事件发生后才能初始化).
所以我试过这个解决方法:
.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"}); } } })
在控制器init我试过:
cordova.test();
但这是不行的(devicereadfy在ng-init后被触发).
之后,我发现这篇文章:
http://java.dzone.com/articles/ionic-and-cordovas-deviceready
但是我不明白如何在应用程序准备好之前放置“启动屏幕”,以及如何设置超时.
有人想法如何解决这个问题?
非常感谢任何建议或帮助.
解决方法
你需要反转这个,首先你处理cordova“deviceready”事件,然后你启动angularjs应用程序.喜欢这个:
>首先从html / body标签中删除ng-app属性
> devireready之后启动有角度的应用程序:
<script> document.addEventListener('deviceready',function() { angular.bootstrap(document,['YourAppName']); },false); var YourAppName = angular.module('YourAppName',[]); </script>
类似的问题:
> Cordova + Angularjs + Device Ready
> Initialize my angularJs App after Phonegap deviceready