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.

Shoen
источник

Ответы:

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']);
Shoen
источник
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 вообще

otherDewi
источник
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', []);

Anth12
источник
1
Это была моя проблема; Я пропустил объявление angular.module ('my.Namespace', []); перед использованием angular.module ('my.Namespace'). Directive ('myDirective', [...
ScottFoster1000
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' ]); 
SirajuddinLuck
источник
Забыл, что вы должны включать src при использовании определенных зависимостей!
К - Токсичность в СО растет.
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.

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

pleerock
источник
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']); С этим вы готовы начать!

zahid9i
источник
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>

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

Ареф Бозоргмехр
источник