2014-10-07 11 views
15

Я задавался вопросом, когда Угловая журналы ошибок это куча бреда похожее на это:Debugging Угловая

Error: [ng:areq] Argument 'AppController' is not a function, got undefined 
http://errors.angularjs.org/1.2.23/ng/areq?p0=AppController&p1=not%20a%20function%2C%20got%20undefined 
    at http://localhost/NAME/vendors/angular/angular.js:78:12 
    at assertArg (http://localhost/NAME/vendors/angular/angular.js:1509:11) 
    at assertArgFn (http://localhost/NAME/vendors/angular/angular.js:1519:3) 
    at http://localhost/NAME/vendors/angular/angular.js:7271:9 
    at http://localhost/NAME/vendors/angular/angular.js:6663:34 
    at forEach (http://localhost/NAME/vendors/angular/angular.js:332:20) 
    at nodeLinkFn (http://localhost/NAME/vendors/angular/angular.js:6650:11) 
    at compositeLinkFn (http://localhost/NAME/vendors/angular/angular.js:6098:13) 
    at compositeLinkFn (http://localhost/NAME/vendors/angular/angular.js:6101:13) 
    at compositeLinkFn (http://localhost/NAME/vendors/angular/angular.js:6101:13) 

Как узнать, какая линия МОЕ кода (не угловой исходный код) срабатывает ошибка? Добавление контрольных точек или Batarang не помогает.

Редактировать

У меня нет проблем с этой конкретной ошибки. Бывают случаи, когда угловые регистрируют номер строки, например Controller.js:1183:48, и случаи, когда это не так. В чем разница? И в последнем случае, как узнать строку ошибок MY?

ответ

11
  1. Если проблема является ошибкой во время выполнения внутри одного из ваших контроллеров, вы получите номер строки.

  2. Если это проблема, интерпретируя то встроенный {{ like.this() }} или проблемы с выражением в директиве (напр: ng-repeat='foo in undefinedBar'), или любое другое выражение не работает внутри тега сценария или ссылки, то вы получите строку кода из угловой структуры, где впервые была обнаружена ошибка (обычно либо сама директива, либо ядро).

  3. Если один из ваших контроллеров просто не разбирает из-за неправильного синтаксиса, он скажет вам, что он даже не может загрузить модуль. Это также применимо, если на самом деле существует проблема с настройкой вашего приложения, но я предполагаю, что этот вопрос относится к тем временам, когда вы пытаетесь найти труднодоступную ошибку в контроллере или представлении.

Обычно, когда я переживаю # 2 (самый распространенный источник разочарования) я искать подсказки относительно того, какой тип ошибки он (возможно, коллекция не была определена, если он говорит мне «длина» было определено, например). Обычно проблема связана либо с плохим синтаксисом, либо с моими моделями контроллеров, которые не были в состоянии, которое я ожидал.

+1

так как вы НАЙТИ источник проблемы? Я не хочу тратить часы на поиск ошибки одного персонажа, которая не связана с моей текущей проблемой. Этот ответ не отвечает на самую важную часть вопроса. – user3338098

+0

Не зная конкретной ошибки (вопрос не касался конкретной ошибки), невозможно полностью ответить. Много раз невозможно определить строку кода на основе трассировки стека, и обычно это потому, что угловой не имеет возможности сообщать о строке вашего представления html, в котором выражается встроенное выражение. Но в этих случаях действительно должно быть достаточно очевидно, что вы можете определить проблему в нескольких частях кода. Использование unminified версии AngularJS в debug добавляет к гораздо более подробному протоколу, что обычно полезно. – Dave

+1

Также я добавлю, что очевидное решение состоит в том, чтобы убедиться в том, что в шаблоне # 1 имеется как можно больше ошибок. Вы можете сделать это, ограничив использование сложных встроенных выражений и вместо этого откладывая функции контроллера для любых преобразований данных. Затем вы просто остаетесь, убедившись, что ваш синтаксис верен для таких вещей, как ng-repeat и ng-options. В тех случаях, когда ваше мнение настолько велико, что на самом деле требуется «часы» для отслеживания, я бы предложил уменьшить размер вашей проблемы, добавив больше структуры, но это основные принципы программирования, которые я ожидал, что OP уже знает об этом. – Dave

2

Вы можете нажать на: -

http://errors.angularjs.org/1.2.23/ng/areq?p0=AppController&p1=not%20a%20function%2C%20got%20undefined 

Эта ссылка (вторая линия) ошибки. Он откроет описание ошибки на веб-сайте углового js.

Например, в вашем случае ошибка:

Argument 'AppController' is not a function, got undefined 

Что значит, у вас есть опечатка в контроллере или вы не сделали контроллер вообще. Вы можете увидеть эту ошибку, как только вы нажмете на эту ссылку.

Редактировать: Если есть ошибка, относящаяся к вашему коду, как что-то неопределенное. Вы также получаете ссылку на свою кодовую строку. Ниже приведен пример такой ошибки, когда переменная не определена.

TypeError: Cannot read property 'filetype' of undefined 
    at Object.fn (http://localhost:8080/techpedia/js/Controller.js:1183:48) 
    at k.$digest (http://localhost:8080/techpedia/js/angular.min.js:109:403) 
    at k.$apply (http://localhost:8080/techpedia/js/angular.min.js:112:398) 
    at http://localhost:8080/techpedia/js/angular.min.js:18:270 
    at Object.d [as invoke] (http://localhost:8080/techpedia/js/angular.min.js:35:36) 
    at c (http://localhost:8080/techpedia/js/angular.min.js:18:178) 
    at fc (http://localhost:8080/techpedia/js/angular.min.js:18:387) 
    at Xc (http://localhost:8080/techpedia/js/angular.min.js:17:415) 
    at HTMLDocument.<anonymous> (http://localhost:8080/techpedia/js/angular.min.js:214:144) 
    at l (http://localhost:8080/techpedia/js/foundation.min.js:18:16937) 

Ссылка укажет номер строки в вашем коде.

http://localhost:8080/techpedia/js/Controller.js:1183:48 
+0

Спасибо, я сделал это, но он по-прежнему не указывает на номер строки в MY-коде. Есть ли способ отслеживания этого? – Luxiyalu

+0

Я отредактировал свой ответ соответственно, ваш контроллер отсутствует. Либо опечатка, либо вы не включили файл или что-то в этом роде. Отправьте часть своего кода, что сделает вещи более ясными. Вы также можете нажать на третью строку, чтобы получить код. – divyenduz

+0

Я знаю, что вызвало эту конкретную ошибку. Я задаю общий вопрос. Третья строка указывает на угловой исходный код, а не на то, где код MY привел к этой строке углового кода. – Luxiyalu

0

Проверьте правильность определения AppController. Поиск AppController в ваших источниках

0

Основание на этом, ответ у вас нет. Это одна из проблем, которую angularjs пытается исправить при разработке javascript.

Их ответ - это структура, которая предлагает или заставляет разработчиков кодировать легко проверяемый javascript.