ээ, angularjs оборачивает большую часть кода вашего шаблона и выполняет его динамически ... источником ошибки всегда является angular.js, поэтому найти источник ошибки практически невозможно.
user3338098 09
Ответы:
64
1. Хром
Для отладки AngularJS в хроме вы можете использовать AngularJS Batarang . (Из недавних обзоров плагина кажется, что AngularJS Batarang больше не поддерживается. Проверено в различных версиях Chrome, не работает)
жаль, что это не работает. Я хочу, чтобы этот парень начал поддерживать эту вещь, потому что это отличная идея и имеет большой потенциал
Tules
5
@AskQuestion Похоже, Батаранг больше не поддерживается. Этот ответ должен быть удален
Аакил Фернандес
Команда Angular (в основном @btford) по-прежнему поддерживает Batarang, но, похоже, это не является приоритетом в их списке, поскольку все они готовятся к следующей версии AngularJS 2.0. Посмотрите, ng-inspectне вызывает ли у вас головная боль Батаранг.
demisx
если предположить, что batarang работает правильно, то к ошибкам angular.js в консоли не добавляется никакого дополнительного контекста, и вкладка AngularJS тоже не помогает.
user3338098 09
1
@SazzadTusharKhan: хорошо. Попробуйте это -> в версии для Mac у вас есть меню разработчика («Разработка»), в Mac это меню отображается через настройки> расширенный> показать меню разработки, и там вы можете просматривать такие элементы, как «Начать отладку javascript». Для справки: youtube.com/watch?v=BUvsnDhFL2w
Vaibhav Jain
35
ИМХО, наиболее неприятный опыт возникает при получении / установке значения определенной области, связанной с визуальным элементом. Я устанавливал много точек останова не только в собственном коде, но и в самом angular.js, но иногда это просто не самый эффективный способ. Хотя приведенные ниже методы очень эффективны, они определенно считаются плохой практикой, если вы действительно используете их в производственном коде, поэтому используйте их с умом!
Получите ссылку в консоли из визуального элемента
Во многих браузерах, отличных от IE, вы можете выбрать элемент, щелкнув его правой кнопкой мыши и выбрав «Проверить элемент». В качестве альтернативы вы также можете щелкнуть любой элемент, например, на вкладке «Элементы» в Chrome. Последний выбранный элемент будет сохранен в переменной $0консоли.
Получите область действия, связанную с элементом
В зависимости от того, существует ли директива, которая создает изолированную область видимости, вы можете получить эту область с помощью angular.element($0).scope()или angular.element($0).isolateScope()(используйте, $($0).scope()если включен $). Это именно то, что вы получаете, когда используете последнюю версию Batarang. Если вы изменяете значение напрямую, не забудьте использовать scope.$digest()для отражения изменений в пользовательском интерфейсе.
$ eval - это зло
Не обязательно для отладки. scope.$eval(expression)очень удобно, если вы хотите быстро проверить, имеет ли выражение ожидаемое значение.
Отсутствующие члены прототипа области видимости
Разница между scope.blaи scope.$eval('bla')в первом случае не учитывает унаследованные от прототипа значения. Используйте приведенный ниже фрагмент, чтобы получить полную картину (вы не можете напрямую изменить значение, но вы все $evalравно можете использовать !)
scopeCopy =function(scope){var a ={};for(x in scope){if(scope.hasOwnProperty(x)&&
x.substring(0,1)!=='$'&&
x !=='this'){
a[x]= angular.copy(scope[x])}}return a};
scopeEval =function(scope){if(scope.$parent ===null){return hoho(scope)}else{return angular.extend({}, haha(scope.$parent), hoho(scope))}};
Используйте его с scopeEval($($0).scope()).
Где мой контроллер?
Иногда вам может потребоваться отслеживать значения, ngModelкогда вы пишете директиву. Используйте $($0).controller('ngModel')и вы получите , чтобы проверить $formatters, $parsers, $modelValue, $viewValue$renderи все.
К сожалению, большинство надстроек и расширений браузера просто показывают вам значения, но не позволяют редактировать переменные области видимости или запускать функции angular. Если вы хотите изменить переменные $ scope в консоли браузера (во всех браузерах), вы можете использовать jquery. Если вы загружаете jQuery до AngularJS, angular.element можно передать селектор jQuery. Итак, вы можете проверить объем контроллера с помощью
angular.element('[ng-controller="name of your controller"]').scope()
Пример:
вам нужно изменить значение переменной $ scope и увидеть результат в браузере, а затем просто ввести в консоли браузера:
Вы можете сразу увидеть изменения в своем браузере. Причина, по которой мы использовали $ apply (): любая переменная области, обновленная из внешнего контекста angular, не будет обновлять ее привязку, вам необходимо запустить цикл дайджеста после обновления значений области с помощью scope.$apply().
Для наблюдения за значением переменной $ scope вам просто нужно вызвать эту переменную.
Пример:
вы хотите увидеть значение $ scope.var1 в веб-консоли в Chrome или Firefox, просто введите:
По какой-то причине это действительно не работает внутри компонентов. Кажется, что консоль находит точку останова в точке создания компонента, но не отображает код, который фактически выполняется. По крайней мере не для меня. хотя вы можете просмотреть значение переменных, которые находятся в области видимости. Если кто-нибудь знает, как заставить отладчик отображать фактический код, который проходит через советы, будет признателен.
user1023110 07
3
var rootEle = document.querySelector("html");var ele = angular.element(rootEle);
scope ()
Мы можем получить $ scope из элемента (или его родителя), используя метод scope () для элемента:
var scope = ele.scope();
инжектор ()
var injector = ele.injector();
С помощью этого инжектора мы можем затем создать экземпляр любого объекта Angular внутри нашего приложения, такого как службы, другие контроллеры или любой другой объект.
Для кода Visual Studio (не Visual Studio): Ctrl+ Shift+P
Введите отладчик для Chrome в строке поиска, установите его и включите.
В свой launch.jsonфайл добавьте этот конфиг:
{"version":"0.1.0","configurations":[{"name":"Launch localhost with sourcemaps","type":"chrome","request":"launch","url":"http://localhost/mypage.html","webRoot":"${workspaceRoot}/app/files","sourceMaps":true},{"name":"Launch index.html (without sourcemaps)","type":"chrome","request":"launch","file":"${workspaceRoot}/index.html"},]}
Вы должны запустить Chrome с включенной удаленной отладкой, чтобы расширение подключилось к нему.
Windows
Щелкните правой кнопкой мыши ярлык Chrome и выберите свойства. В поле «target» добавьте --remote-debugging-port = 9222 Или в командной строке выполните /chrome.exe --remote-debugging-port = 9222
OS X
В терминале выполните / Applications / Google \ Chrome.app/Contents/MacOS/Google \ Chrome --remote-debugging-port = 9222
Linux
В терминале запустите google-chrome --remote-debugging-port = 9222
Поскольку надстройки больше не работают, наиболее полезным набором инструментов, который я нашел, является использование Visual Studio / IE, потому что вы можете устанавливать точки останова в своем JS и таким образом проверять свои данные. Конечно, в Chrome и Firefox инструменты разработчика намного лучше. Кроме того, старый добрый console.log () оказался очень полезным!
Ответы:
1. Хром
Для отладки AngularJS в хроме вы можете использовать AngularJS Batarang . (Из недавних обзоров плагина кажется, что AngularJS Batarang больше не поддерживается. Проверено в различных версиях Chrome, не работает)
Вот ссылка для описания и демонстрации:
Введение в Angular JS Batarang
Загрузите плагин Chrome отсюда: плагин Chrome для отладки AngularJS
Вы также можете обратиться по этой ссылке: ng-book: Debugging AngularJS
Вы также можете использовать ng-inspect для отладки angular.
2. Firefox
Для Firefox с помощью Firebug вы можете отлаживать код.
Также используйте эти надстройки Firefox: AngScope: надстройки для Firefox (не официальное расширение от команды AngularJS)
3. Отладка AngularJS : проверьте ссылку: отладка AngularJS
источник
ng-inspect
не вызывает ли у вас головная боль Батаранг.ИМХО, наиболее неприятный опыт возникает при получении / установке значения определенной области, связанной с визуальным элементом. Я устанавливал много точек останова не только в собственном коде, но и в самом angular.js, но иногда это просто не самый эффективный способ. Хотя приведенные ниже методы очень эффективны, они определенно считаются плохой практикой, если вы действительно используете их в производственном коде, поэтому используйте их с умом!
Получите ссылку в консоли из визуального элемента
Во многих браузерах, отличных от IE, вы можете выбрать элемент, щелкнув его правой кнопкой мыши и выбрав «Проверить элемент». В качестве альтернативы вы также можете щелкнуть любой элемент, например, на вкладке «Элементы» в Chrome. Последний выбранный элемент будет сохранен в переменной
$0
консоли.Получите область действия, связанную с элементом
В зависимости от того, существует ли директива, которая создает изолированную область видимости, вы можете получить эту область с помощью
angular.element($0).scope()
илиangular.element($0).isolateScope()
(используйте,$($0).scope()
если включен $). Это именно то, что вы получаете, когда используете последнюю версию Batarang. Если вы изменяете значение напрямую, не забудьте использоватьscope.$digest()
для отражения изменений в пользовательском интерфейсе.$ eval - это зло
Не обязательно для отладки.
scope.$eval(expression)
очень удобно, если вы хотите быстро проверить, имеет ли выражение ожидаемое значение.Отсутствующие члены прототипа области видимости
Разница между
scope.bla
иscope.$eval('bla')
в первом случае не учитывает унаследованные от прототипа значения. Используйте приведенный ниже фрагмент, чтобы получить полную картину (вы не можете напрямую изменить значение, но вы все$eval
равно можете использовать !)Используйте его с
scopeEval($($0).scope())
.Где мой контроллер?
Иногда вам может потребоваться отслеживать значения,
ngModel
когда вы пишете директиву. Используйте$($0).controller('ngModel')
и вы получите , чтобы проверить$formatters
,$parsers
,$modelValue
,$viewValue
$render
и все.источник
есть также $ log, который вы можете использовать! он использует вашу консоль так, как вы хотите, чтобы она работала!
отображение ошибки / предупреждения / информации так, как обычно показывает ваша консоль!
используйте это> документ
источник
Несмотря на ответ на вопрос, было бы интересно взглянуть на ng-Inspector.
источник
Попробуйте ng-Inspector. Загрузите надстройку для Firefox с веб-сайта http://ng-inspector.org/ . Он недоступен в меню дополнений Firefox.
http://ng-inspector.org/ - сайт
http://ng-inspector.org/ng-inspector.xpi - надстройка Firefox
источник
К сожалению, большинство надстроек и расширений браузера просто показывают вам значения, но не позволяют редактировать переменные области видимости или запускать функции angular. Если вы хотите изменить переменные $ scope в консоли браузера (во всех браузерах), вы можете использовать jquery. Если вы загружаете jQuery до AngularJS, angular.element можно передать селектор jQuery. Итак, вы можете проверить объем контроллера с помощью
Пример: вам нужно изменить значение переменной $ scope и увидеть результат в браузере, а затем просто ввести в консоли браузера:
Вы можете сразу увидеть изменения в своем браузере. Причина, по которой мы использовали $ apply (): любая переменная области, обновленная из внешнего контекста angular, не будет обновлять ее привязку, вам необходимо запустить цикл дайджеста после обновления значений области с помощью
scope.$apply()
.Для наблюдения за значением переменной $ scope вам просто нужно вызвать эту переменную.
Пример: вы хотите увидеть значение $ scope.var1 в веб-консоли в Chrome или Firefox, просто введите:
Результат будет немедленно показан в консоли.
источник
Добавьте звонок туда,
debugger
где вы собираетесь его использовать.На
console
вкладке инструментов веб-разработчика вашего браузера введитеangular.reloadWithDebugInfo();
Посетите или перезагрузите страницу, которую вы собираетесь отлаживать, и увидите, как отладчик появится в вашем браузере.
источник
scope () Мы можем получить $ scope из элемента (или его родителя), используя метод scope () для элемента:
инжектор ()
С помощью этого инжектора мы можем затем создать экземпляр любого объекта Angular внутри нашего приложения, такого как службы, другие контроллеры или любой другой объект.
источник
Вы можете добавить «отладчик» в свой код и перезагрузить приложение, которое поставит точку останова, и вы сможете «перешагнуть» или запустить.
источник
Вы можете отлаживать браузеры, встроенные в инструменты разработчика.
откройте инструменты разработчика в браузере и перейдите на вкладку исходного кода.
откройте файл, который вы хотите отладить, используя Ctrl + P и найдите имя файла
добавить точку останова в строке, нажав на левую часть кода.
обновите страницу.
Существует множество плагинов для отладки, которые вы можете использовать для использования плагина Chrome. Отладка приложения Angular с использованием плагина «Отладчик для Chrome»
источник
Для кода Visual Studio (не Visual Studio): Ctrl+ Shift+P
Введите отладчик для Chrome в строке поиска, установите его и включите.
В свой
launch.json
файл добавьте этот конфиг:Вы должны запустить Chrome с включенной удаленной отладкой, чтобы расширение подключилось к нему.
Щелкните правой кнопкой мыши ярлык Chrome и выберите свойства. В поле «target» добавьте --remote-debugging-port = 9222 Или в командной строке выполните /chrome.exe --remote-debugging-port = 9222
В терминале выполните / Applications / Google \ Chrome.app/Contents/MacOS/Google \ Chrome --remote-debugging-port = 9222
В терминале запустите google-chrome --remote-debugging-port = 9222
Найти больше ===>
источник
Поскольку надстройки больше не работают, наиболее полезным набором инструментов, который я нашел, является использование Visual Studio / IE, потому что вы можете устанавливать точки останова в своем JS и таким образом проверять свои данные. Конечно, в Chrome и Firefox инструменты разработчика намного лучше. Кроме того, старый добрый console.log () оказался очень полезным!
источник
Возможно, вы можете использовать расширение Angular Augury A Google Chrome Dev Tools для отладки приложений Angular 2 и выше.
источник