Я работаю над доказательством концепции, используя Angular JavaScript.
Как отладить Angular код JavaScript в разных браузерах (Firefox и Chrome)?
Я работаю над доказательством концепции, используя Angular JavaScript.
Как отладить Angular код JavaScript в разных браузерах (Firefox и Chrome)?
1. Chrome
Для Debug AngularJS в хром вы можете использовать AngularJS Batarang. (Из недавних обзоров на плагине кажется, что AngularJS Batarang больше не поддерживается. Протестировано в разных версиях хром не работает)
Вот ссылка для описания и демонстрации:
Загрузите chrome plugin отсюда: chrome plugin для отладки AngularJS
Вы также можете сослаться на эту ссылку: ng-book: Отладка AngularJS
Вы также можете использовать ng-inspect для отладки angular.
2. Firefox
Для Firefox с помощью Firebug вы можете отлаживать код.
Также используйте надстройки Firefox: AngScope: надстройки для Firefox (не официальное расширение командой AngularJS)
3. Отладка AngularJS: проверьте ссылку: Отладка AngularJS
IMHO, самый неприятный опыт связан с получением/установкой значения определенной области, связанной с визуальным элементом. Я сделал много точек останова не только в своем собственном коде, но также и в angular.js, но иногда это просто не самый эффективный способ. Хотя приведенные ниже методы очень эффективны, они, безусловно, считаются плохой практикой, если вы действительно используете в производственном коде, поэтому используйте их с умом!
Во многих браузерах, отличных от IE, вы можете выбрать элемент, щелкнув правой кнопкой мыши элемент и нажав "Осмотреть элемент". Кроме того, вы также можете щелкнуть любой элемент на вкладке Элементы в Chrome, например. Последний выбранный элемент будет храниться в переменной $0
в консоли.
В зависимости от того, существует ли директива, которая создает область изоляции, вы можете получить область видимости с помощью angular.element($0).scope()
или angular.element($0).isolateScope()
(используйте $($0).scope()
, если включен параметр $). Это именно то, что вы получаете, когда используете последнюю версию Batarang. Если вы меняете значение напрямую, не забудьте использовать scope.$digest()
, чтобы отразить изменения в пользовательском интерфейсе.
Не обязательно для отладки. 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
и все.
существует также $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. Таким образом, вы можете проверить область действия контроллера с помощью
angular.element('[ng-controller="name of your controller"]').scope()
Пример: Вам нужно изменить значение переменной $scope и увидеть результат в браузере, а затем просто ввести консоль браузера:
angular.element('[ng-controller="mycontroller"]').scope().var1 = "New Value";
angular.element('[ng-controller="mycontroller"]').scope().$apply();
Вы можете сразу увидеть изменения в своем браузере. Причина, по которой мы использовали $apply(), - это: любая переменная области, обновленная извне angular контекста, не обновит привязку, вам нужно запустить цикл дайджест после обновления значений области с помощью scope.$apply()
.
Для наблюдения значения переменной $scope вам просто нужно вызвать эту переменную.
Пример: Вы хотите увидеть значение $scope.var1 в веб-консоли в Chrome или Firefox, просто введите:
angular.element('[ng-controller="mycontroller"]').scope().var1;
Результат будет немедленно показан на консоли.
var rootEle = document.querySelector("html");
var ele = angular.element(rootEle);
Объем() Мы можем получить $scope из элемента (или его родителя) с помощью метода scope() на Элемент:
var scope = ele.scope();
инжектор()
var injector = ele.injector();
С помощью этого инжектора мы можем затем создать экземпляр любого объекта Angular внутри нашего приложения, такого как службы, другие контроллеры или любой другой объект
Добавьте вызов debugger
, где вы собираетесь его использовать.
someFunction(){
debugger;
}
На вкладке console
инструментов веб-разработчика браузера введите angular.reloadWithDebugInfo();
Посетите или перезагрузите страницу, которую вы собираетесь отлаживать, и посмотрите, как отладчик отображается в вашем браузере.
Вы можете добавить "отладчик" в свой код и перезагрузить приложение, которое помещает точку останова, и вы можете "перешагнуть" или запустить.
var service = {
user_id: null,
getCurrentUser: function() {
debugger; // Set the debugger inside
// this function
return service.user_id;
}
Для кода Visual Studio (не Visual Studio) выполните Ctrl + Shift + P
введите Debugger для Chrome в строке поиска, установите его и включите.
в файле Lanche.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 с удаленной отладкой, чтобы расширение было прикреплено к нему.
Щелкните правой кнопкой мыши ярлык 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 имеют гораздо лучшие инструменты для разработчиков в целом. Кроме того, хороший ol 'console.log() был очень полезен!
Возможно, вы можете использовать Angular Augury Расширение инструментальных средств Google Chrome Dev для отладки Angular 2 и выше приложений.