Подтвердить что ты не робот

Ошибка: [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);
            }
        };
    }]);
4b9b3361

Ответ 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

Ответ 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";
});