2013-08-17 2 views
420

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

ответ

622

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

Если вы не уверены, какой модуль отсутствует, используйте не уменьшенная угловой.js, который дает читаемое сообщение об ошибке: '' Ошибка: [$ injector: nomod] Модуль 'ngRoute' недоступен! Вы либо ошибочно написали имя модуля, либо забыли его загрузить. Если регистрация модуля гарантирует, что вы укажете зависимости как второй аргумент. "' – Mart

+2

Хм, я использую беседу, и он предоставляет файлы .map. Интересно, почему Chrome все еще показывал мне ошибки из мини-файла. Спасибо за головы, @ Март! –

+0

Зачем им это делать ??? действительно является ngRoute услугой, которая должна быть выведена из основных угловых сервисов? я не понимаю. – arg20

4

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

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

12

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

я делал это, и когда я установил порядок, ошибка ушла. более

37

Одна вещь, чтобы добавить в список, как это первый результат, который приходит с поиска Google на «Ошибка: [$ Инжектор: modulerr] угловая»:

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

Например, если ваш HTML выглядит следующим образом:

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

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

     etc ... 

И ваш JavaScript выглядит следующим образом (т.е. имеет опечатка на имя приложения - myWebCite вместо МойВебСайт):

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

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

то 'Ошибка: также генерируется ошибка [$ инжектор: modulerr] угловой.

+0

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

40

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

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

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

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

Read more here об угловых зависимостей Аннотация.

3

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

Note: Starting with AngularJS version 1.2, ngRoute is in its own module and must be loaded by loading the additional angular-route.js file, which we download via Bower above.

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

Installation First include angular-route.js in your HTML:

You can download this file from the following places:

Google CDN e.g. //ajax.googleapis.com/ajax/libs/angularjs/X.Y.Z/angular-route.js Bower e.g. bower install [email protected] code.angularjs.org e.g. "//code.angularjs.org/X.Y.Z/angular-route.js" where X.Y.Z is the AngularJS version you are running.

Then load the module in your application by adding it as a dependent module:

angular.module('app', ['ngRoute']); With that you're ready to get started!

0

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

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

в

<access origin="*"/> 

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

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 при использовании определенных зависимостей! –

5

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

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

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

19

ошибка нуб может забыть включить модуль расслоение плотной

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

файлы в index.html на всех

+13

Удивительно, насколько плохо сообщения отладки/ошибки находятся в угловом режиме. –

+0

LOL. Я сказал себе: нет, я не могу сделать эту простую ошибку. И я передал ваш ответ несколько раз. Но это решило мою проблему. – Maubeh

+0

Речь идет о некотором недостатке импорта – ahmedbhs

6

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

Решение: Добавить КДС угловой 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> 
6

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

angular.module('MyApp');

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

+0

Это была моя проблема; Мне не удалось объявить _angular.module ('my.Namespace', []); _ перед использованием _angular.module ('my.Namespace'). Директива ('myDirective', [..._ – StackoverflowLoser

2

John Papa при условии, мой вопрос о this довольно неясного комментарий: Иногда, когда вы получите эту ошибку, это означает, что вам не хватает файла. В других случаях это означает, что модуль был определен после его использования. Один из способов решения этой проблемы - назвать файлы модулей * .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

Смежные вопросы