AngularJS 1.2 $ инжектор: modulerr

435

При использовании angular 1.2 вместо 1.07 следующий фрагмент кода больше недействителен, почему?

'use strict';

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

app.config(['$routeProvider', '$locationProvider',
    function($routeProvider, $locationProvider) {
        $locationProvider.html5Mode(true);
        $routeProvider.
        when('/', {
            templateUrl: 'part.html',
            controller: 'MyCtrl'
        }).
        otherwise({
            redirectTo: '/'
        });
    }
]);

проблема находится в части конфигурации инжектора (app.config):

Uncaught Error: [$injector:modulerr] http://errors.angularjs.org/1.2.0rc1/$injector/modulerr?p0=muninn&p1=Error%…eapis.com%2Fajax%2Flibs%2Fangularjs%2F1.2.0rc1%2Fangular.min.js%3A31%3A252) 

Если я правильно помню, эта проблема началась с angular 1.1.6.

Теги:

15 ответов

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

Проблема была вызвана отсутствием включения модуля ngRoute. Начиная с версии 1.1.6, это отдельная часть:

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.0rc1/angular-route.min.js"></script>

var app = angular.module('myapp', ['ngRoute']);
  • 487
    Если вы не уверены, какой модуль отсутствует, используйте не минимизированный angular.js, который выдает читаемое сообщение об ошибке: "Error: [$injector:nomod] Module 'ngRoute' is not available! You either misspelled the module name or forgot to load it. If registering a module ensure that you specify the dependencies as the second argument."
  • 2
    Хм, я использую bower, и он предоставляет файлы .map - интересно, почему Chrome все еще показывал мне ошибки из уменьшенного файла. Спасибо за внимание, @Mart!
Показать ещё 14 комментариев
37

моя ошибка исчезла, добавив это '()' в конец

(function(){
    var home = angular.module('home',[]);

    home.controller('QuestionsController',function(){
        console.log("controller initialized");
        this.addPoll = function(){
            console.log("inside function");
        };
    });
})();
37

Еще одна вещь, которую нужно добавить в список, поскольку это первый результат, который включает поиск Google: "Ошибка: [$ injector: modulerr] angular":

Если у вас есть несоответствие между вашим именем приложения в вашем "index'html" и в вашем основном определении приложения javascript, это также может вызвать эту ошибку.

Например, если ваш HTML выглядит так:

    </head>
    <body ng-app="myWebSite">

        <!-- My Web Site -->
        <p>About my web site...</p>

        etc ...

И ваш JavaScript выглядит так (у меня есть опечатка на имени приложения - myWebCite вместо myWebSite):

/** Main AngularJS Web Application */ 
var app = angular.module('myWebCite', [ 'ngRoute' ]); 

/** Configure the Routes */ 
app.config(['$routeProvider', function ($routeProvider) { 
  etc ...

тогда также генерируется ошибка "Ошибка: [$ инжектор: modulerr] angular".

  • 0
    Я был очень близок к этому. Я установил ng-app = "app" ... и затем никогда не настраивал модуль. Так что это было ошибкой. Как новичок, я просто удалил часть = "app", чтобы мой пример кода заработал. Позже я настрою соответствующий модуль и маршрутизацию ... :)
16

Ошибка noob может забыть включить модуль js

<script src="app/modules/myModule.js"></script>

в файле index.html вообще

  • 18
    Удивительно, насколько плохи сообщения отладки / ошибок в угловых.
  • 2
    ЛОЛ. Я сказал себе, нет, я не могу сделать эту простую ошибку. И я передал ваш ответ несколько раз. Но это решило мою проблему.
Показать ещё 1 комментарий
12

Для тех, кто использует фреймворки, которые сжимают, связывают и минимизируют файлы, убедитесь, что вы явно определяете каждую зависимость, поскольку эти структуры, как правило, переименовывают ваши переменные. Это случилось со мной при использовании ASP.NET BundleConfig.cs для объединения скриптов приложений.

До

app.config(function($routeProvider) {
    $routeProvider.
      when('/', {
          templateUrl: 'list.html',
          controller: 'ListController'
      }).
      when('/items/:itemId', {
          templateUrl: 'details.html',
          controller: 'DetailsController'
      }).
      otherwise({
          redirectTo: '/'
      });
});

После

app.config(["$routeProvider", function($routeProvider) {
    $routeProvider.
      when('/', {
          templateUrl: 'list.html',
          controller: 'ListController'
      }).
      when('/items/:itemId', {
          templateUrl: 'details.html',
          controller: 'DetailsController'
      }).
      otherwise({
          redirectTo: '/'
      });
}]);

Подробнее здесь о Angular Аннотации зависимостей.

12

Если у вас есть эта ошибка в консоли ([$injector:nomod], MINERR_ASSET:22), убедитесь, что вы не включаете код приложения перед загрузкой AngularJS

Я делал это, и как только я исправил порядок, ошибка исчезла.

7
add to link
<script src="//cdnjs.cloudflare.com/ajax/libs/angular.js/1.3.0/angular-route.min.js"></script>

var app = angular.module('apps', [ 'ngRoute' ]); 
  • 0
    Забыл, что вы должны включать src при использовании определенных зависимостей!
6

Я только что испытал ту же ошибку, в моем случае это было вызвано отсутствием второго параметра в angular.module - надеюсь, это может помочь кому-то с той же проблемой.

angular.module('MyApp');

angular.module('MyApp', []);

  • 1
    Это была моя проблема; Я пропустил объявление angular.module ('my.Namespace', []); перед использованием angular.module ('my.Namespace'). directive ('myDirective', [...
5

У меня была такая же проблема, и я попытался все возможные решения. Но, наконец, я узнал из документации, что модуль ngRoute теперь разделен. Посмотрите на ссылка

Решение: Добавьте cdn angular -route.js после angular.min.js script

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular-route.js"></script>
4

Другим триггером для этой ошибки является ".". перед вашим "другим" или любым другим маршрутом в определении маршрута:

  app.config(['$routeProvider',
     function($routeProvider) {
        $routeProvider.
           when('/view1', {
              templateUrl: 'partials/view1.html',
              controller: 'Ctrl1'
           }).
           otherwise({
              redirectTo: '/viewCounts'
           });
     }]);

Раздраженный полной остановкой, опять же. Должен любить JS!

4

Помимо ответа ниже, если у вас есть эта ошибка в консоли ([$injector:nomod], MINERR_ASSET:22), но все работает нормально, убедитесь, что в нет дубликата в вашем index.html.

Поскольку эта ошибка также может быть поднята, если у вас есть дубликат, включающий файлы, которые используют этот модуль, и включаются перед файлом с фактическим объявлением модуля.

3

Если вы просмотрите официальный урок angularjs https://docs.angularjs.org/tutorial/step_07

Примечание. Начиная с версии AngularJS 1.2, ngRoute находится в собственном модуль и должен быть загружен путем загрузки дополнительного angular -route.js файл, который мы загружаем через Bower выше.

Также обратите внимание на ngRoute api https://docs.angularjs.org/api/ngRoute

Установка Сначала включите angular -route.js в свой HTML:

Вы можете загрузите этот файл из следующих мест:

Google CDN, например. //ajax.googleapis.com/ajax/libs/angularjs/X.Y.Z/ angular-route.js Bower например bower install angular [email protected] code.angularjs.org, например. "//code.angularjs.org/X.Y.Z/angular-route.js", где X.Y.Z - это Вы используете версию AngularJS.

Затем загрузите модуль в приложение, добавив его в качестве зависимого модуль:

angular.module('app', ['ngRoute']); С этим вы готовы началось!

2

Джон Папа предоставил мою проблему на этот довольно неясный комментарий: иногда, когда вы получаете эту ошибку, это означает, что вам не хватает файла. В других случаях это означает, что модуль был определен после его использования. Один из способов решения этой проблемы - назвать файлы модулей *.module.js и загрузить их первым.

0

Его ошибка инжектора. Возможно, вы использовали большое количество файлов JavaScript, поэтому инжектор может отсутствовать.

Некоторые из них:

var app = angular.module('app', 
    ['ngSanitize', 'ui.router', 'pascalprecht.translate', 'ngResource', 
     'ngMaterial', 'angularMoment','md.data.table', 'angularFileUpload', 
     'ngMessages', 'ui.utils.masks', 'angular-sortable-view',          
     'mdPickers','ngDraggable','as.sortable', 'ngAnimate', 'ngTouch']
);

Пожалуйста, проверьте инжектор, который вам нужно вставить в app.js

0

Моя проблема была в файле config.xml. Изменение:

<access origin="*" launch-external="yes"/>

к

<access origin="*"/>

зафиксировал его.

Ещё вопросы

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