Інжектор 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, що це було .... Не шанувальник кутових документів. Все одно дякую! Я проголосував.
RachelD

4
Ви можете отримати цю помилку, якщо під час визначення свого модуля ви використовуєте angular.module ("myModule") замість angular.module ("myModule", []). stackoverflow.com/questions/16260538 / ...
Anirudhan ямайських

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

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

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

файли в index.html взагалі


24
Дивовижно, наскільки погані повідомлення про налагодження / помилки в куті.
K - Токсичність в SO зростає.

3
ЛОЛ. Я сказав собі: ні, я не можу зробити просту помилку. І я відповів твою відповідь кілька разів. Але це вирішило мою проблему.
Maubeh

Йдеться про відсутність імпорту
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.Npacepace"). директива ("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

Крім наведеної нижче відповіді, якщо ви маєте помилку в консолі ( [$injector:nomod], MINERR_ASSET:22), але все, здається, працює нормально, переконайтеся, що у вас немає у вашому index.html дублікатів.

Оскільки ця помилка може бути підвищена, якщо у вас є дублікати включають файли, які використовують цей модуль, і вони включаються до файлу з фактичним декларацією модуля.


3

Якщо ви пройдете офіційний підручник angularjs https://docs.angularjs.org/tutorial/step_07

Примітка. Починаючи з версії 1.2 AngularJS, 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/XYZ/angular-route.js Баунер, наприклад, встановити баунер з кутовим маршрутом @ XYZ code.angularjs.org, наприклад, "//code.angularjs.org/XYZ/ angular-route.js ", де XYZ - версія AngularJS, яку ви працюєте.

Потім завантажте модуль у свою програму, додавши його як залежний модуль:

angular.module ('додаток', ['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 (PC) та Safari (MAC) для тестування під час розробки. Цей код представив цю помилку: $ injector: modulerr Помилка модуля в IE 11.0.9600 (Windows 7, 32-розрядна).

Під час розслідування з'ясувалося, що помилка пов'язана з тим, що використовується цикл 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.