Ошибка: [ng: areq] Аргумент "MyCtrl" не является функцией, получил undefined

Я новичок в Angularjs, и я следил за учебником, но я получил ошибку в названии.

Код HTML:

<div data-ng-app="myApp">
    <div data-ng-controller="MyCtrl">
    <form>
        <table>
        <tr style="font-weight: bold">
          <td>ID</td>
          <td>Name</td>
          <td>Surname</td>
          <td>House</td>
          <td>Address</td>
          <td>Locality</td>
          <td>Contact</td>
          <td>Contact 2</td>
          <td>Contact 3</td>
          <td>Reply</td>
          <td>Edit</td>
        </tr>
        <tr data-ng-repeat="person in persons">
            <td>{{person.ID}}</td>
            <td>{{person.Name}}</td>
            <td>{{person.Surname}}</td>
            <td>{{person.House}}</td>
            <td>{{person.Address}}</td>
        </tr>


        </table>
    </form>
    </div>
</div>

<script type="text/javascript">
    //Defining a Angular module
    var myApp = angular.module('myApp', []); 
    //Defining a Angular Controller 
    myApp.controller('MyCtrl', ['$scope', '$http', function ($scope, $http) { 

    //Retrieving the List of people 
    GetPersons(); 
    //Displaying the Save button 
    $scope.DisplaySave = true; 

    function GetPersons() { 
    //Defining the $http service for getting the people 
    $http({
     method: 'GET', url: '/api/data' 
     }). 
     success(function (data) {
      if (data != null || data != 'undefined') { 
        //Assigning people data to the $scope variable
        $scope.persons = data; 
        //Clearing the Person object in create context and Showing default Gender(Male) Checked 
        $scope.newperson = { 
        Id: ''
        }; 
        } 
        }) 
        .error(function (error) { 
            //Showing error message 
            $scope.status = 'Unable to retrieve people' + error.message; 
        });
    }
} ]);
</script>

API-контроллер:

public class DataController : ApiController
    {
        //GET api/data

        public IEnumerable<CommonLayer.Telesales> GetPeople()
        {
            return new BusinessLayer.Telesales().getUserSession(User.Identity.Name).AsEnumerable();
        }

Дополнительные сведения об ошибке:

magicplayer:init: set version: 1.0.1
adme: onDOMStart: got code: user_key=f52009a2292c2b524ac9af2801caef4c443d7cdc7697dff171f77b3c81cd26fa gender=1 age=4
Error: [ng:areq] Argument 'MyCtrl' is not a function, got undefined
http://errors.angularjs.org/1.2.18/ng/areq?p0=MyCtrl&p1=not%20a%20function%2C%20got%20undefined
    at http://localhost:12570/Scripts/angular.js:78:12
    at assertArg (http://localhost:12570/Scripts/angular.js:1475:11)
    at assertArgFn (http://localhost:12570/Scripts/angular.js:1485:3)
    at http://localhost:12570/Scripts/angular.js:7198:9
    at http://localhost:12570/Scripts/angular.js:6592:34
    at forEach (http://localhost:12570/Scripts/angular.js:327:20)
    at nodeLinkFn (http://localhost:12570/Scripts/angular.js:6579:11)
    at compositeLinkFn (http://localhost:12570/Scripts/angular.js:6028:13)
    at compositeLinkFn (http://localhost:12570/Scripts/angular.js:6031:13)
    at compositeLinkFn (http://localhost:12570/Scripts/angular.js:6031:13)
Failed to load resource: the server responded with a status of 404 (Not Found) http://localhost:12570/Images/accent.png
onMessageFromBackground: method=statPixel

что я делаю неправильно? Я ищу другие решения, но похоже, что моя проблема немного отличается.

Ответ 1

Оказывается, у меня был и следующий тег html на странице макета, который возвращал эту ошибку

<html lang="en ng-app">

Удалено ng-приложение из тега, и код отлично работает

Ответ 2

В моем случае я только что забыл добавить контроллер script в index.html

Ответ 3

Я получил такую ​​ошибку, когда я ошибся с моим именем контроллера. Он был заглавён в файле js, но не в теге ng-controller в html файле.

Ответ 4

Я получил эту ошибку, используя диалог Material Design в моем контроллере Angularjs с очень трудной для поиска опечаткой:

templateUrl: 'template.html';

Когда я заменил точку с запятой соответствующей запятой, она решила проблему.

templateUrl: 'template.html',

Ответ 5

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

<html ng-app="">

Мне нужно было предоставить имя модуля. Я дал, и это сработало!

<html ng-app="app">

Ответ 6

Когда-то мы используем одно и то же имя модуля в factory, контроллерах и main module.so, это основная причина, по которой она выдаст ошибку. Ошибка: [ng: areq] Аргумент, не используйте то же имя модуля, когда вы вызываете свои службы, контроллеры, factory.

Ответ 7

Я сбил с ума по этому поводу через пару часов после проверки и двойной проверки всех предложений. Но выяснилось, что после того, как я очистил данные браузера Chrome (файлы cookie, размещенные данные приложения и кэшированные изображения и файлы), ошибка исчезла. Даже обновление не похоже, чтобы все перечисленные элементы были достаточно очищены.

Ответ 8

Я использовал <html ngapp> вместе с angular 1.4.8

Изменил его до 1.2.8 и избавился от ошибки.

Мой html имел <div class ="container" ng-controller="AppCtrl">

и у меня был файл controller.js с функцией

function AppCtrl(){ console.log("Hello from controller") }

Ответ 9

В моем случае:

  • по ошибке у меня были два тега тела <body ng-controller="CtrlWasNotFound"> <body></body </body>
  • не только это - app.js вернул HTML index.html(использовал gulp и имел проблему с конфигурацией

Ответ 10

Чтобы устранить эту проблему, мне пришлось обнаружить, что я ошибся с именем контроллера в объявлении маршрутов Angular:

.when('/todo',{
            templateUrl: 'partials/todo.html',
            controller: 'TodoCtrl'
        })

Ответ 11

<sript

вместо

<script 

;) при соединении с контроллером .js. В моем случае