我从事Ionic项目(AngularJS + Apache Cordova又称Phonegap).
我的项目的第一个代码行是4个月,而昨天,应用程序不再适用于模拟器和真实设备,但仍然适用于chrome窗口.所以我想我的角度代码是正确的,但我不知道问题在哪里,我不知道如何处理它.
一开始我直接在我的www
文件夹中编码,我测试它是使用devtools和设备仿真的chrome,或者使用Apache Ripple扩展的chrome,有时我将它安装到我的真实设备(Nexus S)中.
我最近在我的项目中安装了grunt和bower用于常见任务,我决定重新组织我的项目文件夹.
然后,我现在编码到一个src
文件夹,并:
在使用chrome进行测试之前,我运行grunt'dev'任务,创建一个www
文件夹,并包含一个链接到scr/
js,html,css和其他res文件的专用index.html .
在模拟器或真实设备中测试之前,我运行grunt'prod'任务,创建一个www
文件夹,包括构建或复制所有需要的文件到应用程序(app.min.css,app.min.js,模板,字体和媒体)文件,图标).
它们都可以在chrome中正常工作,但是当我构建(通过cordova-cli或phonegap构建)并在模拟器或真实设备上安装应用程序时,我会获得启动画面,然后是永久的白屏.
我尝试在weinre I 的帮助下调试它,并注意到js控制台没有捕获任何抛出的错误.但是我放置了一些console.log,看起来路由已经坏了.
angular.module('app').run()
执行,但第一个AppCtrl控制器永远不会执行.
这是我的模块代码(这篇文章的重要部分):
(function(){ angular.module('app', [ 'ionic', 'ngCordova', 'app.auth', 'app.model', 'app.action', // 'app.test', ]) .run(['$ionicPlatform', function($ionicPlatform) { alert("app.run() runs ..."); }]) .config(['$stateProvider','$urlRouterProvider', function($stateProvider, $urlRouterProvider) { var tmplt_dir = 'modules/app/tmplt'; var tmplt = function(viewName){ return tmplt_dir + '/' + viewName + '.html' ; }; $stateProvider .state('app', { url: "/app", abstract: true, templateUrl: tmplt('app') , controller: 'AppCtrl' }) .state('app.main', { url: "/main", abstract: false, views: { "menuContent" : { templateUrl: tmplt('main') , controller: 'MainCtrl' } } }) .state('app.main.home', { url: "/home", views: { 'homeTabContent' :{ templateUrl: tmplt('home') , controller: 'HomeCtrl' } } }); // if none of the above states are matched, use this as the fallback $urlRouterProvider.otherwise('/app/main/home'); }]) .controller('AppCtrl', [ '$rootScope', '$cordovaToast', '$window', function($rootScope, $cordovaToast, $window) { alert('AppCtrl runs...'); $rootScope.notImplementedException = function(){ var message = "Bientôt disponible."; try { $cordovaToast.showShortCenter(message); } catch(e){ alert(message); } }; $rootScope.browserOpen = function(href){ var ref = $window.open(href, '_system', 'location=yes'); }; }]) .controller('MainCtrl', [ function() { alert('MainCtrl runs...'); }]) .controller('HomeCtrl', [ '$rootScope','$auth', '$app', function($rootScope, $auth, $app) { alert('HomeCtrl runs...'); if (!$auth.checkLogin()) { $auth.authError(); } $rootScope.appName = $app.name; }]) })();
出现的唯一警报是:
app.run()运行...
因此,未出现的警报是:
AppCtrl运行...
MainCtrl运行...
HomeCtrl运行...
请记住,在chrome中,一切都完美无缺!
这个问题真是令人费解,我已经失去了几个小时来跟踪它,但没有成功.
任何的想法 ?