При использовании 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.
Проблема была вызвана отсутствием включения модуля 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']);
моя ошибка исчезла, добавив это '()' в конец
(function(){
var home = angular.module('home',[]);
home.controller('QuestionsController',function(){
console.log("controller initialized");
this.addPoll = function(){
console.log("inside function");
};
});
})();
Еще одна вещь, которую нужно добавить в список, поскольку это первый результат, который включает поиск 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".
Ошибка noob может забыть включить модуль js
<script src="app/modules/myModule.js"></script>
в файле index.html вообще
Для тех, кто использует фреймворки, которые сжимают, связывают и минимизируют файлы, убедитесь, что вы явно определяете каждую зависимость, поскольку эти структуры, как правило, переименовывают ваши переменные. Это случилось со мной при использовании 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 Аннотации зависимостей.
Если у вас есть эта ошибка в консоли ([$injector:nomod], MINERR_ASSET:22)
, убедитесь, что вы не включаете код приложения перед загрузкой AngularJS
Я делал это, и как только я исправил порядок, ошибка исчезла.
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' ]);
Я только что испытал ту же ошибку, в моем случае это было вызвано отсутствием второго параметра в angular.module
- надеюсь, это может помочь кому-то с той же проблемой.
angular.module('MyApp');
angular.module('MyApp', []);
У меня была такая же проблема, и я попытался все возможные решения. Но, наконец, я узнал из документации, что модуль 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>
Другим триггером для этой ошибки является ".". перед вашим "другим" или любым другим маршрутом в определении маршрута:
app.config(['$routeProvider',
function($routeProvider) {
$routeProvider.
when('/view1', {
templateUrl: 'partials/view1.html',
controller: 'Ctrl1'
}).
otherwise({
redirectTo: '/viewCounts'
});
}]);
Раздраженный полной остановкой, опять же. Должен любить JS!
Помимо ответа ниже, если у вас есть эта ошибка в консоли ([$injector:nomod]
, MINERR_ASSET:22
), но все работает нормально, убедитесь, что в нет дубликата в вашем index.html.
Поскольку эта ошибка также может быть поднята, если у вас есть дубликат, включающий файлы, которые используют этот модуль, и включаются перед файлом с фактическим объявлением модуля.
Если вы просмотрите официальный урок 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']); С этим вы готовы началось!
Джон Папа предоставил мою проблему на этот довольно неясный комментарий: иногда, когда вы получаете эту ошибку, это означает, что вам не хватает файла. В других случаях это означает, что модуль был определен после его использования. Один из способов решения этой проблемы - назвать файлы модулей *.module.js и загрузить их первым.
Его ошибка инжектора. Возможно, вы использовали большое количество файлов 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
Моя проблема была в файле config.xml. Изменение:
<access origin="*" launch-external="yes"/>
к
<access origin="*"/>
зафиксировал его.
"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."