Як налагодити кутовий код JavaScript


104

Я працюю над доведенням концепції за допомогою Angular JavaScript.

Як налагодити кутовий код JavaScript у різних браузерах (Firefox та Chrome)?


13
Ех angularjs приховує багато вашого шаблонного коду і динамічно виконує його ... джерелом помилки завжди є "angular.js", таким чином знайти джерело помилки майже неможливо.
користувач3338098

Відповіді:


64

1. Хром

Для налагодження AngularJS в хромі можна використовувати AngularJS Batarang . (З останніх оглядів плагіну здається, що AngularJS Batarang більше не підтримується. Тестоване в різних версіях хрому не працює)

Ось посилання для опису та демонстрації:

Введення кутового JS Batarang

Завантажте хромовий плагін звідси: хромований плагін для налагодження AngularJS

Ви також можете посилатися на це посилання: ng-book: Налагодження AngularJS

Ви також можете використовувати ng-Inspection для налагодження кутових.

2. Firefox

Для Firefox за допомогою Firebug ви можете налагодити код.

Також використовуйте ці додатки для Firefox : AngScope: надбудови для Firefox (не офіційне розширення від команди AngularJS)

3. Налагодження AngularJS : Перевірте посилання: Налагодження AngularJS


1
сором, це насправді не працює. Я б хотів, щоб хлопець почав підтримувати річ, адже це чудова ідея і має великий потенціал
Тулес,

5
@AskQuestion Схоже, що Batarang більше не підтримується. Цю відповідь слід усунути
Аакіл Фернандес

Команда Angular (здебільшого @btford) все ще підтримує Batarang, але це, здається, не є пріоритетним у їхньому списку, оскільки всі вони очолюють наступний реліз AngularJS 2.0. Погляньте, ng-inspectякщо Батаранг доставляє вам головний біль.
demisx

якщо припустити, що batarang працює належним чином, до помилок angular.js в консолі не додається додатковий контекст, і вкладка 'AngularJS' також не допомагає.
користувач3338098

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і все.


13

є також $ log, який ви можете використовувати! він використовує вашу консоль таким чином, щоб ви хотіли, щоб вона працювала!

показуючи помилку / попередження / інформацію так, як ваша консоль показує вас нормально!

скористайтеся цим> Документ


Посилання розірвано.
Відновіть Моніку - немайнард



7

На жаль, більшість доповнень та розширень браузера просто показують вам значення, але вони не дозволяють вам редагувати змінні обсягу або виконувати кутові функції. Якщо ви хочете змінити змінні $ range у консолі браузера (у всіх браузерах), тоді ви можете використовувати jquery. Якщо ви завантажите jQuery перед AngularJS, angular.element може бути переданий селектором jQuery. Таким чином, ви можете перевірити сферу роботи контролера

angular.element('[ng-controller="name of your controller"]').scope()

Приклад: Вам потрібно змінити значення змінної $ range і побачити результат у браузері, а потім просто ввести консоль браузера:

angular.element('[ng-controller="mycontroller"]').scope().var1 = "New Value";
angular.element('[ng-controller="mycontroller"]').scope().$apply();

Ви можете побачити зміни у своєму браузері негайно. Причина, за якою ми застосували $ apply (), полягає в тому, що будь-яка змінна область, що оновлюється за межами кутового контексту, не оновлює прив'язку, потрібно виконати цикл дайджесту після оновлення значень області scope.$apply().

Щоб спостерігати значення змінної $ range, вам просто потрібно викликати цю змінну.

Приклад: Ви хочете побачити значення $ range.var1 на веб-консолі в Chrome або Firefox, просто введіть:

angular.element('[ng-controller="mycontroller"]').scope().var1;

Результат буде показаний на консолі негайно.


5

Додайте дзвінок туди, debuggerде ви його маєте намір використовувати.

someFunction(){
  debugger;
}

На consoleвкладці інструментів веб-розробників веб-переглядача виберітьangular.reloadWithDebugInfo();

Відвідайте або перезавантажте сторінку, яку ви хочете налагодити, і побачите, як налагоджувач з’являється у вашому браузері.


Здається, це чомусь не працює в компонентах чомусь. Здається, консоль визначає точку розриву в точці, де створений компонент, але не відображатиме код, який насправді виконується. Принаймні не для мене. хоча ви можете переглянути значення змінних, які є сферою дії. Якщо хтось знає, як змусити налагоджувачу відобразити фактичний код, який переходить через поради, буде вдячний.
user1023110

3
var rootEle = document.querySelector("html");
var ele = angular.element(rootEle); 

range () Ми можемо отримати область $ з елемента (або його батьківського), використовуючи метод range () для елемента:

var scope = ele.scope();

інжектор ()

var injector = ele.injector();

За допомогою цього інжектора ми зможемо інсталювати будь-який кутовий об’єкт у нашій програмі, наприклад служби, інші контролери або будь-який інший об'єкт


Дякую. Тільки те, що мені було потрібно!
березня 1616

2

Ви можете додати "код налагодження" у свій код і перезавантажити додаток, яке ставить туди перерву, і ви можете "переступити" або запустити.

var service = {
user_id: null,
getCurrentUser: function() {
  debugger; // Set the debugger inside 
            // this function
  return service.user_id;
}

2

Налагоджувати можна за допомогою браузерів, вбудованих в інструменти для розробників.

  1. відкрийте інструменти для розробників у веб-переглядачі та перейдіть на вкладку "джерело".

  2. відкрийте файл, який ви хочете налагодити, використовуючи Ctrl + P та шукайте ім'я файлу

  3. додайте точку розриву на рядок, натиснувши ліву частину коду.

  4. оновіть сторінку.

Для налагодження доступно багато плагінів, на які ви можете звернутися за допомогою хромованого додатка Налагоджувальний кутовий додаток, використовуючи плагін "Налагоджувач для хрому".


1

Для коду 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

  • ОС X

У терміналі виконайте / Applications / Google \ Chrome.app/Contents/MacOS/Google \ Chrome --remote-debugging-port = 9222

  • Linux

У терміналі запустіть google-chrome --remote-debugging-port = 9222

Знайти більше ===>


0

Оскільки додатки більше не працюють, найкориснішим набором інструментів, які я знайшов, є використання Visual Studio / IE, оскільки ви можете встановити точки перелому у своєму JS та інспектувати ваші дані таким чином. Звичайно, Chrome і Firefox в цілому мають набагато кращі інструменти для розробників. Крім того, хороший ol 'console.log () був дуже корисним!


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.