AngularJS - Ошибка при переходе с 1.2.9 на 1.4.9

0

Я новичок в AngularJs, и когда я пытаюсь использовать версию 1.4.9 из Angular вместо 1.2.9 (я использовал без проблем), я получаю ошибку. Я читал о необходимости объявить новую функцию таким образом:

    angular.module('scotchApp', []).controller('prenotazioneController', [function ($scope) {
    //$scope.message = 'Pagina Delle info!!!';//
}]);

вместо:

function getTask($scope, $http, Base64) {
//do something
};

Но у меня всегда была эта ошибка:

Ошибка: ng: areq Плохой аргумент --- Аргумент 'mainController' не является функцией, получил неопределенный

Я думаю, что ошибка относится к этому коду, но я уже изменил способ объявления этой функции.

В JS:

    // create the module and name it scotchApp
var scotchApp = angular.module('scotchApp', ['ngRoute']);

// configure our routes
scotchApp.config(function ($routeProvider) {
    $routeProvider

    // route for the home page
        .when('/', {
        templateUrl: 'view/home.html',
        controller: 'mainController'
    })

    // route for the about page
    .when('/prenotazione', {
        templateUrl: 'view/prenotazione.html',
        controller: 'prenotazioneController'
    })

    .when('/login', {
        templateUrl: 'view/login.html',
        controller: 'loginController'
    });
});

// create the controller and inject Angular $scope
angular
    .module('scotchApp', [])
    .controller('mainController', [function ($scope) {
        // create a message to display in our view
         $scope.message = 'Vai alla Prenotazione';
    }]);

angular.module('scotchApp', []).controller('prenotazioneController', [function ($scope) {
    /*   $scope.message = 'Pagina Delle info!!!';*/
}]);

angular.module('scotchApp', []).controller('loginController', [function ($scope) {
    $scope.message = '*Necessario per eseguire una prenotazione';
}]);

В HTML:

<html ng-app="scotchApp">

<head>
    <!-- SCROLLS -->
    <link href='https://fonts.googleapis.com/css?family=PT+Sans:400italic,400,700,700italic' rel='stylesheet' type='text/css'>
    <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" />
    <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css" />
    <link href="style.css" rel="stylesheet" type="text/css">
<!-- SPELLS -->

<script src="//code.angularjs.org/1.4.9/angular.min.js"></script>
<script src="//code.angularjs.org/1.4.9/angular-route.min.js"></script>
<script src="//code.jquery.com/jquery-2.1.4.min.js"></script>
<script src="//maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>
<script type="text/javascript" src="script.js"></script>
<script type="text/javascript" src="test.js"></script></head>

    <nav class="navbar navbar-default navbar-fixed-top" role="navigation">
        <div class="container">
            <div class="navbar-header">

                <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1">

                    <span class="sr-only">Toggle navigation</span>
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>

                </button>

                <a class="navbar-brand">
                    <img class="hidden-xs" src="image/logo.png" alt="">
                    <img class="visible-xs" src="image/logo.png" alt="">
                </a>
            </div>
            <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
                <ul class="nav navbar-nav navbar-right">
                    <li><a href="#/"><i class="fa fa-home"></i>Home</a></li>
                </ul>
            </div>
        </div>
    </nav>

    <div id="main">

        <!-- angular templating -->
        <!-- this is where content will be injected -->
        <div ng-view></div>

    </div>
</div>

1 ответ

3
Лучший ответ

Вы неправильно ссылаетесь на модуль app:

Ваш код:

angular.module('scotchApp', [])
    .controller(...)

Используя angular.module('scotchApp', []) с помощью скобок [], вы по существу переписываете свой модуль приложения каждый раз.

Измените его так:

angular
   .module('scotchApp')
   .controller(...)

Вам нужно только создать модуль приложения один раз, а затем ссылаться на него.

Создание модуля:

angular.module("app", []); // creates a module.

Ссылка на модуль:

angular.module("app");    // reference a module.

Ниже приведен простой пример:

(function () {

    var app = angular.module("app", []);

    app.controller("MainController", MainController);

    MainController.$inject = ["$http"];

    function MainController($http) {

    }

})();

Вот пример Plnkr, использующий ваш стиль кода. Надеюсь, это поможет и прояснит некоторые вещи.

  • 0
    Спасибо за ответ. Я пытался удалить [] из angular.module('scotchApp', []) но та же ошибка появляется ... Я также пытался использовать это: (function () { angular .module("scotchApp") .controller("mainController", mainController); mainController.$inject = ["$scope"]; function mainController($scope) { $scope.message = 'Vai alla Prenotazione'; }; }); но не повезло.
  • 0
    @ Люк, у тебя есть где-нибудь код, который мы можем посмотреть, или это частный код?
Показать ещё 6 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню