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


445

При использовании углового 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) 

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

Ответы:


636

Проблема была вызвана отсутствующим включением модуля 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']);

492
Если вы не уверены, какой модуль отсутствует, используйте не минимизированный 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!
депутат Адитья

5
@ arg20, вы найдете ответ здесь: github.com/angular/angular.js/commit/...
Лоран

4
Святая корова, я искал ВЕЗДЕ решение этой проблемы. Я обновил с 1.0 до 1.2 и получил эту ошибку. Единственный совет, который я смог найти, - убедиться, что был включен angular-route.js, что и было… Не фанат Angular docs. В любом случае, благодарю Вас! Я проголосовал за.
RachelD

4
Вы можете получить эту ошибку, если вы используете angular.module ('myModule') вместо angular.module ('myModule', []) при определении вашего модуля. stackoverflow.com/questions/16260538/…
Anirudhan J

42

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

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

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

40

Еще одна вещь, которую нужно добавить в список, так как это первый результат, который приводит к поиску 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 ...

тогда будет также сгенерирована ошибка «Ошибка: [$ injector: modulerr] angular».


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

25

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

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

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


24
Удивительно, насколько плохи сообщения отладки / ошибок в угловых.
К - Токсичность в СО растет.

3
ЛОЛ. Я сказал себе, нет, я не могу сделать эту простую ошибку. И я передал ваш ответ несколько раз. Но это решило мою проблему.
Мобе,

Речь идет о пропавшем импорте
famas23

13

Для тех, кто использует каркасы, которые сжимают, связывают и минимизируют файлы, убедитесь, что вы определили каждую зависимость явно, поскольку эти каркасы имеют тенденцию переименовывать ваши переменные. Это случилось со мной при использовании 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: '/'
      });
}]);

Узнайте больше здесь об аннотации угловых зависимостей.


12

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

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


9

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

angular.module('MyApp');

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


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


6

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

Решение: добавьте cdn angular-route.js после сценария angular.min.js

<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>

5

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

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

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


4

Помимо приведенного ниже ответа, если у вас есть эта ошибка в console ( [$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

Установка первых включают угловые-route.js в вашем HTML:

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

Google CDN, например, //ajax.googleapis.com/ajax/libs/angularjs/XYZ/angular-route.js Bower, например, bower install angular-route @ XYZ code.angularjs.org, например, "//code.angularjs.org/XYZ/ angular-route.js ", где XYZ - версия AngularJS, которую вы используете.

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

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


2

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


0

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

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

в

<access origin="*"/>

починил это.


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

Иногда я видел эту ошибку, когда вы переключаетесь между проектами и запускаете проекты на одном и том же порту один за другим. В этом случае GOTO Инструменты разработчика Chrome> Сеть и попытаться проверить фактическое написанный JS файл для: if the file match with the workspce. Чтобы решить эту проблему, выберите Disable Cacheв сети.


0

Через много месяцев я вернулся к разработке приложения AngularJS ( 1.6.4 ), для которого я выбрал Chrome (ПК) и Safari (MAC) для тестирования во время разработки. Этот код представляет эту ошибку: $ injector: modulerr Ошибка модуля в IE 11.0.9600 (Windows 7, 32-bit).

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

В основном это была проблема IE11 ( здесь ответили ), а не проблема AngularJS, но я хочу разместить этот ответ здесь, потому что возникшее исключение было исключением AngularJS. Надеюсь, это поможет некоторым из нас там.

по аналогии. не используйте лямбда-функции ... просто замените () => {...} на хорошую функцию ol () {...}


0

У меня была эта проблема, и после проверки моего кода строка за строкой я увидел это

 <textarea class="form-control" type="text" ng-model="WallDesc" placeholder="Enter Your Description"/>

я просто изменил это на

     <textarea class="form-control" type="text" ng-model="WallDesc" placeholder="Enter Your Description"></textarea>

и это сработало. так что проверяйте свои теги.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.