Ошибка: [ng: areq] из контроллера angular
Это длинный выстрел, но кто-нибудь видел эту ошибку раньше? Я пытаюсь добавить "Транспортировщики" с помощью экспресс, angular и mongoDB. Я получаю эту ошибку всякий раз, когда я обращаюсь к странице, управляемой контроллером транспортеров:
Error: [ng:areq] http://errors.angularjs.org/1.2.12/ng/areq?p0=TransportersController&p1=not%20aNaNunction%2C%20got%20undefined
at Error (native)
at http://localhost:3000/lib/angular/angular.min.js:6:450
at tb (http://localhost:3000/lib/angular/angular.min.js:18:360)
at Pa (http://localhost:3000/lib/angular/angular.min.js:18:447)
at http://localhost:3000/lib/angular/angular.min.js:62:17
at http://localhost:3000/lib/angular/angular.min.js:49:43
at q (http://localhost:3000/lib/angular/angular.min.js:7:386)
at H (http://localhost:3000/lib/angular/angular.min.js:48:406)
at f (http://localhost:3000/lib/angular/angular.min.js:42:399)
at http://localhost:3000/lib/angular/angular.min.js:42:67
Контроллер транспортеров выглядит следующим образом:
'use strict';
angular.module('mean.transporters').controller('TransportersController', ['$scope', '$routeParams', '$location', 'Global', 'Transporters', function ($scope, $routeParams, $location, Global, Transporters) {
$scope.global = Global;
$scope.create = function() {
var transporter = new Transporters({
name: this.name,
natl_id: this.natl_id,
phone: this.phone
});
transporter.$save(function(response) {
$location.path('transporters/' + response._id);
});
this.title = '';
this.content = '';
};
$scope.remove = function(transporter) {
if (transporter) {
transporter.$remove();
for (var i in $scope.transporters) {
if ($scope.transporters[i] === transporter) {
$scope.transporters.splice(i, 1);
}
}
}
else {
$scope.transporter.$remove();
$location.path('transporters');
}
};
$scope.update = function() {
var transporter = $scope.transporter;
if (!transporter.updated) {
transporter.updated = [];
}
transporter.updated.push(new Date().getTime());
transporter.$update(function() {
$location.path('transporters/' + transporter._id);
});
};
$scope.find = function() {
Transporters.query(function(transporters) {
$scope.transporters = transporters;
});
};
$scope.findOne = function() {
Transporters.get({
transporterId: $routeParams.transporterId
}, function(transporter) {
$scope.transporter = transporter;
});
};
}]);
В моих представлениях я вызываю список и создаю методы. Они генерируют указанную выше ошибку
Я получил это из документов angular для ng: areq, хотя все еще не могу понять, что происходит
AngularJS часто утверждает, что некоторые ценности будут присутствовать и правдивы используя вспомогательную функцию. Если утверждение не выполняется, эта ошибка возникает. Чтобы устранить эту проблему, убедитесь, что значение, которое ожидает утверждение, является определенными и правдивыми.
Здесь вид, который вызывает контроллер public/views/transporters/list.html
:
<section data-ng-controller="TransportersController" data-ng-init="find()">
<ul class="transporters unstyled">
<li data-ng-repeat="transporter in transporters">
<span>{{transporter.created | date:'medium'}}</span> /
<h2><a data-ng-href="#!/transporters/{{transporter._id}}">{{transporter.name}}</a></h2>
<div>{{transporter.natl_id}}</div>
<div>{{transporter.phone}}</div>
</li>
</ul>
<h1 data-ng-hide="!transporters || transporters.length">No transporters yet. <br> Why don't you <a href="/#!/transporters/create">Create One</a>?</h1>
</section>
Код службы транспортеров:
angular.module('transporterService', [])
.factory('Transporter', ['$http', function($http){
// all return promise objects
return {
get: function(){
return $http.get('/api/transporters');
},
create: function(transporterData){
return $http.post('/api/transporters', transporterData);
},
delete: function(id){
return $http.delete('/api/transporters/'+id);
}
};
}]);
Ответы
Ответ 1
Я однажды испытал эту ошибку. Проблема в том, что я определил angular.module() в двух местах с разными аргументами.
Например:
var MyApp = angular.module('MyApp', []);
в другом месте,
var MyApp2 = angular.module('MyApp', ['ngAnimate']);
Ответ 2
Я получил эту ошибку дважды:
1) Когда я писал:
var app = module('flapperNews', []);
вместо:
var app = angular.module('flapperNews', []);
2) Когда я копирую и вставляю некоторый html, а имя контроллера в html точно не совпадает с именем контроллера в файле app.js, например:
index.html
<script src="app.js"></script>
...
...
<body ng-app="flapperNews" ng-controller="MainCtrl">
app.js:
var app = angular.module('flapperNews', []);
app.controller('MyCtrl', ....
В html имя контроллера - "MainCtrl", а в js я использовал имя "MyCtrl".
В URL-адресе ошибки есть сообщение об ошибке:
Ошибка: [ng: areq] http://errors.angularjs.org/1.3.2/ng/areq?p0= MainCtrl & p1 = не %20 a %20 функция% 2C %20 получил %20 undefined
Здесь это без иероглифов:
MainCtrl не имеет функции undefined
Другими словами, "Нет функции с именем MainCtrl. Проверьте правильность написания."
Ответ 3
Я столкнулся с этой проблемой, когда я определил модуль в контроллере Angular, но забыл указать имя приложения в своем HTML файле. Например:
<html ng-app>
вместо правильного:
<html ng-app="myApp">
когда я определил что-то вроде:
angular.module('myApp', []).controller(...
и ссылается на него в моем файле HTML.
Ответ 4
вы забыли включить контроллер в свой index.html. Контроллер не существует.
<script src="js/controllers/Controller.js"></script>
Ответ 5
У меня была такая же ошибка, и проблема заключалась в том, что я не ввел новый модуль в основное приложение
var app = angular.module("geo", []);
...
angular
.module('myApp', [
'ui.router',
'ngResource',
'photos',
'geo' //was missing
])
Ответ 6
Проверьте имя вашего модуля angular... как называется имя вашего модуля в app.js?
В вашем TransportersController у вас есть:
angular.module('mean.transporters')
а в вашем TransportersService у вас есть:
angular.module('transporterService', [])
Вероятно, вы хотите ссылаться на один и тот же модуль:
angular.module('myApp')
Ответ 7
У меня тоже была эта ошибка, я изменил код, как это, тогда он сработал.
HTML
<html ng-app="app">
<div ng-controller="firstCtrl">
...
</div>
</html>
app.js
(function(){
var app = angular.module('app',[]);
app.controller('firstCtrl',function($scope){
...
})
})();
Вы должны убедиться, что имя в модуле такое же, как ng-app
тогда div будет находиться в области firstCtrl
Ответ 8
То же самое случилось со мной, но моя проблема заключалась в том, что я не добавлял FILE_NAME_WHERE_IS_MY_FUNCTION.js
поэтому мой file.html не нашел, где была моя функция
Как только я добавлю "file.js", я решил проблему
<html ng-app='myApp'>
<body ng-controller='TextController'>
....
....
....
<script src="../file.js"></script>
</body>
</html>
:)
Ответ 9
У меня есть эта ошибка, когда имя контроллера не было одинаковым (чувствительность к регистру!):
.controller('mainCOntroller', ... // notice CO
и в поле зрения
<div class="container" ng-controller="mainController"> <!-- notice Co -->
Ответ 10
У меня такая же ошибка, когда я включил все имя файла контроллера в Маршрутах, как это:
app.config(function($routeProvider) {
$routeProvider
.when('/', {
templateUrl: 'home.html',
controller: 'mainController.js'
})
.when('/portfolio', {
templateUrl: 'portfolio.html',
controller: 'mainController.js'
})
});
Когда это должно быть
app.config(function($routeProvider) {
$routeProvider
.when('/', {
templateUrl: 'home.html',
controller: 'mainController'
})
.when('/portfolio', {
templateUrl: 'portfolio.html',
controller: 'mainController'
})
});
Angular берет определенные вещи, которые вы называете как приложение и контроллер, и излагает их в директивах и в вашем приложении, старайтесь все последовательно указывать и проверять это при отладке
Ответ 11
Это случилось со мной, когда у меня несколько модулей angular на той же странице
Я столкнулся с этой ошибкой, когда использовал частичные представления
Один частичный вид имел
<script src="~/Scripts/Items.js"></script>
<div ng-app="SearchModule">
<div ng-controller="SearchSomething" class="col-md-1">
<input class="searchClass" type="text" placeholder="Search" />
</div>
</div>
Другие имели
<div ng-app="FeaturedItems" ng-controller="featured">
<ul>
<li ng-repeat="item in Items">{{item.Name}}</li>
</ul>
</div>
У меня были они в одном модуле с другим контроллером, и он начал работать
Ответ 12
У меня была такая же ошибка в демонстрационном приложении, которое касалось состояния безопасности и входа в систему. Ни один из других решений не помог, но просто открытие нового анонимного окна браузера сделал трюк.
В принципе, из предыдущей версии приложения были удалены файлы cookie и токены, которые помещают AngularJS в состояние, которое никогда не предполагалось достичь. Следовательно, утверждения areq
не удались.
Ответ 13
Там также может произойти другой путь.
В моем приложении у меня есть основной модуль, который заботится об управлении, настройке и настройке состояния ui-router. Фактическая функциональность определена в других модулях.
Я определил модуль
angular.module('account', ['services']);
в котором был контроллер DashboardController, но забыл ввести его в основной модуль, где у меня было состояние, на которое ссылался DashboardController.
Так как DashboardController не был доступен из-за отсутствия инъекции, он сбросил эту ошибку.
Ответ 14
В моем случае я включил app.js
под контроллером, а app.js
должен включать выше любого контроллера, например
<script src="js/app.js"></script>
<script src="js/controllers/mainCtrl.js"></script>
Ответ 15
Я сделал все правильно, кроме настройки контроллера в $stateProvider. Я использовал имя файла, а не имя переменной.
Следующий код неверен:
formApp.config(function($stateProvider, $urlRouterProvider) {
$stateProvider
.state('management', {
url: '/management',
templateUrl: 'Views/management.html',
controller: 'Controllers/ManagementController.js'
});
и это правильный подход;
formApp.config(function($stateProvider, $urlRouterProvider) {
$stateProvider
.state('management', {
url: '/management',
templateUrl: 'Views/management.html',
controller: 'ManagementController'
});
Убедитесь, что вы заметили:
контроллер: 'ManagementController'
И для тех, кто интересуется моим файлом управления ControlController.js, он выглядит следующим образом:
formApp.controller('ManagementController', ['$scope', '$http', '$filter', '$state',function(scope, http, filter, state) {
scope.testFunc = function() {
scope.managementMsg = "Controller Works Fine.";
};
}]);
Для тех, кто хочет скелет быстрого запуска angular для примера выше, проверьте эту ссылку https://github.com/zaferfatih/angular_skeleton
Ответ 16
Я знаю, что это звучит глупо, но пока не вижу его здесь:). У меня была эта ошибка, вызванная забыванием закрывающей скобки функции и связанной с ней точкой с запятой, поскольку она была анонимной, назначенной var в конце моего контроллера.
Похоже, что многие проблемы с контроллером (вызванные ошибкой впрыска, синтаксисом и т.д.) вызывают появление этой ошибки.
Ответ 17
Ошибка будет обнаружена, когда ваш контроллер не будет найден в приложении. Вам нужно убедиться, что вы правильно используете значения в директивах ng-app
и ng-controller
Ответ 18
Это случилось со мной при использовании ng-include, а на включенной странице были определены контроллеры. По-видимому, это не поддерживается.
Контроллер, загруженный ng-include, не работает
Ответ 19
Я совершил глупую ошибку и потратил много времени, поэтому добавляю этот ответ здесь, чтобы помочь кому-то
Я неправильно добавлял переменную $scope (зависимость) (добавлял ее без одинарных кавычек)
например, что я делал, было что-то вроде этого
angular.module("myApp",[]).controller('akshay',[$scope,
где требуемый синтаксис подобен этому
angular.module("myApp",[]).controller('akshay',['$scope',
Ответ 20
//включает зависимость контроллера в случае третьего типа
var app = angular.module('app', ['controller']);
//первый тип, чтобы объявить контроллер
// это не работает хорошо
var FirstController = function($scope) {
$scope.val = "First Value";
}
//Второй тип объявления
app.controller('FirstController', function($scope) {
$scope.val = "First Controller";
});
//Третий и лучший тип
angular.module('controller',[]).controller('FirstController', function($scope) {
$scope.val = "Best Way of Controller";
});