Onsen - Cordova - модуль AngularJs недоступен

У меня есть гибридное приложение для Android, я использую кордову и onsen + angular js.

Это мой файл 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>

Это приложениеStart.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/$injector/nomod?p0 =AppModel

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

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


person user2548436    schedule 13.02.2015    source источник


Ответы (2)


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

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

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

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

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

(function() {
  var app = angular.module(...
})();
person Andreas Argelius    schedule 14.02.2015

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

сдача

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

to

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

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

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

person Saeed D.    schedule 18.02.2015