2015-02-13 3 views
0

У меня есть гибридное приложение для Android, я использую cordova и onsen + angular js.Onsen - Cordova - модуль AngularJs недоступен

Это мой файл index.html:

<html lang="en" ng-app="AppModel"> 
    <head> 
    <meta charset="utf-8"> 
    <meta name="apple-mobile-web-app-capable" content="yes"> 
    <meta name="mobile-web-app-capable" content="yes"> 
    <title>AppModel</title> 

    <!-- <link rel="stylesheet" href="css/plugins.css"/> --> 
    <link rel="stylesheet/less" href="css/plugins.less"/> 

    <link rel="stylesheet" href="lib/onsen/css/onsenui.css"> 
    <link rel="stylesheet" href="lib/onsen/css/onsen-css-components.css"> 

    <link rel="stylesheet/less" href="css/app.less"/> 
    <link rel="stylesheet/less" href="css/base-layout.less"/> 

    <script src="css/less.min.js" type="text/javascript"></script> 


    <script src="http://maps.google.com/maps/api/js"></script>   
    <script src="js/lodash_3.2.0.min.js"></script> 


    <script src="lib/onsen/js/angular/angular.js"></script> 

    <script src="js/angular-google-maps_2.0.12.min.js"></script> 
    <script src="lib/onsen/js/angular/angular-touch.js"></script> 

    <script src="lib/onsen/js/onsenui.min.js"></script>  


    <script src="js/jquery.min.js"></script> 
    <script src="js/plugins.js"></script> 

    <script type="text/javascript" src="cordova.js"></script> 

    <script src="js/appStart.js"></script>  
    <script src="js/data/data.js"></script>  
    <script src="js/angularApp/controllers.js"></script>  
    <script src="js/angularApp/directives.js"></script>  
    <script src="js/angularApp/filters.js"></script>  


</head> 

<body >  

<ons-sliding-menu 
    menu-page="modules/core/menu.html" main-page="modules/account_profile/login.html" side="left" 
    var="menu" type="reveal" max-slide-distance="260px" swipable="true" swipe-target-width="50"> 
</ons-sliding-menu> 

</body> 
</html> 

Это appStart.js

var app = { 
// Application Constructor 
initialize: function() { 
    this.bindEvents(); 
}, 
// Bind Event Listeners 
// 
// Bind any events that are required on startup. Common events are: 
// 'load', 'deviceready', 'offline', and 'online'. 
bindEvents: function() { 
    document.addEventListener('deviceready', this.onDeviceReady, false); 
}, 
// deviceready Event Handler 
// 
// The scope of 'this' is the event. In order to call the 'receivedEvent' 
// function, we must explicity call 'app.receivedEvent(...);' 

exitFunction : function(){ 
    if (navigator.notification.confirm("Vuoi chiudere l'app?", 
      function(index) { 
       if (index == 1) { // OK button 
        navigator.app.exitApp(); // Close the app 
       } 
      }, 
      "AppModel", 
      ["Ok","Annulla"] 
     )); 
}, 

onDeviceReady: function() { 
    app.receivedEvent('deviceready'); 

    ons.setDefaultDeviceBackButtonListener(function() { 
     if (navigator.notification.confirm("Vuoi chiudere l'app?", 
      function(index) { 
       if (index == 1) { // OK button 
        navigator.app.exitApp(); // Close the app 
       } 
      }, 
      "AppModel", 
      ["Ok","Annulla"] 
     )); 
    }); 

    /* 
    // Open any external link with InAppBrowser Plugin 
    $(document).on('click', 'a[href^=http], a[href^=https]', function(e){ 

     e.preventDefault(); 
     var $this = $(this); 
     var target = $this.data('inAppBrowser') || '_blank'; 

     window.open($this.attr('href'), target); 

    }); 
    */ 

    $(document).on('click', 'a', function(e){ 

     e.preventDefault(); 
     var $this = $(this); 
     //var target = $this.data('inAppBrowser') || '_blank'; 

     window.open($this.attr('href'), "_system"); 

    }); 


}, 
// Update DOM on a Received Event 
receivedEvent: function(id) { 
    //var parentElement = document.getElementById(id); 
    //var listeningElement = parentElement.querySelector('.listening'); 
    //var receivedElement = parentElement.querySelector('.received'); 

    //listeningElement.setAttribute('style', 'display:none;'); 
    //receivedElement.setAttribute('style', 'display:block;'); 

    console.log('Received Event: ' + id); 
} 

};

(function() { 

var app = angular.module('AppModel', ['onsen', 'angular-carousel', 'uiGmapgoogle-maps'])  
.config([ 
    '$compileProvider', 
    function($compileProvider) 
    { 
     $compileProvider.aHrefSanitizationWhitelist(/^\s*(https?|file|ftp|mailto|tel|geo):/);    
    } 
]); 

document.addEventListener('deviceready', function() { 
    angular.bootstrap(document, ['AppModel']);  
}, false); 

}) 

И data.js, controller.js, filter.js, directive.js все как это:

var app = angular.module('AppModel'); //this is the first line in each file 

app.factory('MenuData', function(){ [...] 

Но когда я запустить приложение в Google Chrome, консоль говорит :

Ошибка при неготовности: [$ injector: nomod] Модуль «AppModel» недоступен! Вы либо ошибочно написали имя модуля, либо забыли загрузить его. Если регистрация модуля гарантирует, что вы укажете зависимости в качестве второго аргумента. http://errors.angularjs.org/1.2.10/ $ форсунка/nomod? P0 = AppModel

Это сообщение появляется для файлов data.js, controller.js, filter.js, directives.js в связи с первой строки каждого файла.

Я не знаю, что делать. Кто-нибудь может мне помочь?

ответ

2

Не похоже, что вы выполняете линию, в которой создается модуль приложения.

Вы должны запустить линию

angular.module('appName', [dependencies]); 

до создания контроллеров и услуг, как говорится в сообщении об ошибке.

Вы вызываете анонимную функцию, которая создает модуль? Просто добавьте пустую скобку и она должна работать:

(function() { 
    var app = angular.module(... 
})(); 
0

Как говорится в сообщении об ошибке, вы должны указать зависимости в качестве второго аргумента. Если ни один не нужен, то передайте пустой массив.

изменение

var app = angular.module('AppModel'); //this is the first line in each file 

в

var app = angular.module('AppModel', []); //this is the first line in each file 

и запустить его снова.

Дополнительная информация: https://docs.angularjs.org/api/ng/function/angular.module

Смежные вопросы