uh anglejs umschließt einen Großteil Ihres Vorlagencodes und führt ihn dynamisch aus. Die Fehlerquelle ist immer "angle.js". Daher ist es fast unmöglich, die Fehlerquelle zu finden.
user3338098
Antworten:
64
1. Chrome
Für Debug AngularJS in Chrome können Sie AngularJS Batarang verwenden . (Aus den letzten Bewertungen des Plugins geht hervor, dass AngularJS Batarang nicht mehr gewartet wird. Getestet in verschiedenen Versionen von Chrome funktioniert nicht)
Schade, dass es nicht wirklich funktioniert. Ich wünschte, der Typ würde anfangen, das Ding zu pflegen, denn es ist eine großartige Idee und hat viel Potenzial
Tules
5
@AskQuestion Batarang wird anscheinend nicht mehr unterstützt. Diese Antwort sollte entfernt werden
Aakil Fernandes
Das Angular-Team (meistens @btford) unterstützt Batarang weiterhin, aber es scheint keine Priorität auf ihrer Liste zu haben, da sie alle an der nächsten AngularJS 2.0-Version beteiligt sind. Schauen Sie nach, ng-inspectob Batarang Ihnen Kopfschmerzen bereitet.
Demisx
Unter der Annahme, dass Batarang ordnungsgemäß funktioniert, wird den angular.js-Fehlern in der Konsole kein zusätzlicher Kontext hinzugefügt, und die Registerkarte 'AngularJS' hilft auch nicht.
user3338098
1
@ JazzadTusharKhan: ok. Versuchen Sie dies -> auf der Mac-Version haben Sie ein Entwicklermenü ("Entwickeln"), auf dem Mac wird dieses Menü über die Einstellungen> Erweitert> Entwicklungsmenü anzeigen angezeigt, und dort können Sie Elemente wie "Debuggen von Javascript starten" anzeigen. Als Referenz: youtube.com/watch?v=BUvsnDhFL2w
Vaibhav Jain
35
IMHO, die frustrierendste Erfahrung kommt vom Erhalten / Festlegen eines Werts eines bestimmten Bereichs, der sich auf ein visuelles Element bezieht. Ich habe viele Haltepunkte nicht nur in meinem eigenen Code, sondern auch in angle.js selbst gesetzt, aber manchmal ist es einfach nicht der effektivste Weg. Obwohl die folgenden Methoden sehr leistungsfähig sind, werden sie definitiv als schlechte Praxis angesehen, wenn Sie sie tatsächlich im Produktionscode verwenden. Verwenden Sie sie also mit Bedacht!
Holen Sie sich eine Referenz in der Konsole von einem visuellen Element
In vielen Nicht-IE-Browsern können Sie ein Element auswählen, indem Sie mit der rechten Maustaste auf ein Element klicken und auf "Element überprüfen" klicken. Alternativ können Sie beispielsweise auch in Chrome auf ein beliebiges Element auf der Registerkarte "Elemente" klicken. Das zuletzt ausgewählte Element wird in einer Variablen $0in der Konsole gespeichert .
Holen Sie sich einen Bereich, der mit einem Element verknüpft ist
Abhängig davon, ob eine Direktive vorhanden ist, die einen isolierten Bereich erstellt, können Sie den Bereich mit angular.element($0).scope()oder abrufen angular.element($0).isolateScope()(verwenden, $($0).scope()wenn $ aktiviert ist). Genau das erhalten Sie, wenn Sie die neueste Version von Batarang verwenden. Wenn Sie den Wert direkt ändern, denken Sie daran, scope.$digest()die Änderungen auf der Benutzeroberfläche wiederzugeben.
$ eval ist böse
Nicht unbedingt zum Debuggen. scope.$eval(expression)ist sehr praktisch, wenn Sie schnell überprüfen möchten, ob ein Ausdruck den erwarteten Wert hat.
Die fehlenden Prototyp-Mitglieder des Geltungsbereichs
Der Unterschied zwischen scope.blaund scope.$eval('bla')ist der erstere berücksichtigt nicht die prototypisch vererbten Werte. Verwenden Sie das folgende Snippet, um das gesamte Bild zu erhalten (Sie können den Wert nicht direkt ändern, aber Sie können ihn $evaltrotzdem verwenden!).
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))}};
Verwenden Sie es mit scopeEval($($0).scope()).
Wo ist mein Controller?
Manchmal möchten Sie möglicherweise die Werte überwachen, ngModelwenn Sie eine Direktive schreiben. Verwenden Sie $($0).controller('ngModel')und Sie werden das erhalten zu überprüfen $formatters, $parsers, $modelValue, $viewValue$renderund alles.
Ich finde AngularJS Batarang nicht nützlich, aber ng-inspector scheint trotzdem gut zu funktionieren.
Martin Vseticka
7
Versuchen Sie es mit ng-inspector. Laden Sie das Add-On für Firefox von der Website http://ng-inspector.org/ herunter . Es ist im Firefox-Add-On-Menü nicht verfügbar.
Leider zeigen die meisten Add-Ons und Browser-Erweiterungen nur die Werte an, aber Sie können keine Bereichsvariablen bearbeiten oder Winkelfunktionen ausführen. Wenn Sie die $ scope-Variablen in der Browserkonsole (in allen Browsern) ändern möchten, können Sie jquery verwenden. Wenn Sie jQuery vor AngularJS laden, kann angle.element ein jQuery-Selektor übergeben werden. So können Sie den Umfang eines Controllers mit überprüfen
angular.element('[ng-controller="name of your controller"]').scope()
Beispiel:
Sie müssen den Wert der Variablen $ scope ändern und das Ergebnis im Browser anzeigen. Geben Sie dann einfach die Browserkonsole ein:
Sie können die Änderungen sofort in Ihrem Browser sehen. Der Grund, warum wir $ apply () verwendet haben, ist: Jede Bereichsvariable, die von außerhalb des Winkelkontexts aktualisiert wurde, aktualisiert ihre Bindung nicht. Sie müssen den Digest-Zyklus ausführen, nachdem Sie die Werte des Bereichs mit aktualisiert haben scope.$apply().
Um einen $ scope-Variablenwert zu beobachten, müssen Sie nur diese Variable aufrufen.
Beispiel:
Sie möchten den Wert von $ scope.var1 in der Webkonsole in Chrome oder Firefox sehen. Geben Sie einfach Folgendes ein:
Dies scheint aus irgendeinem Grund in Komponenten nicht wirklich zu funktionieren. Die Konsole scheint den Haltepunkt an dem Punkt zu lokalisieren, an dem die Komponente erstellt wird, zeigt jedoch nicht den Code an, der tatsächlich ausgeführt wird. Zumindest nicht für mich. Sie können jedoch den Wert von Variablen anzeigen, die Gültigkeitsbereich sind. Wenn jemand weiß, wie er den Debugger dazu bringt, den tatsächlichen Code anzuzeigen, der durch die Ratschläge geführt wird, wäre er dankbar.
user1023110
3
var rootEle = document.querySelector("html");var ele = angular.element(rootEle);
scope ()
Wir können den $ scope vom Element (oder seinem übergeordneten Element) abrufen, indem wir die scope () -Methode für das Element verwenden:
var scope = ele.scope();
Injektor ()
var injector = ele.injector();
Mit diesem Injektor können wir dann jedes Angular-Objekt in unserer App instanziieren, z. B. Dienste, andere Controller oder jedes andere Objekt
Sie können 'Debugger' in Ihren Code einfügen und die App neu laden, wodurch der Haltepunkt dort platziert wird, und Sie können 'übergehen' oder ausführen.
var service ={
user_id:null,
getCurrentUser:function(){debugger;// Set the debugger inside // this functionreturn service.user_id;}
Für Visual Studio-Code (nicht Visual Studio) Ctrl+ Shift++P
Geben Sie Debugger for Chrome in die Suchleiste ein, installieren Sie es und aktivieren Sie es.
launch.jsonFügen Sie in Ihrer Datei diese Konfiguration hinzu:
{"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"},]}
Sie müssen Chrome mit aktiviertem Remote-Debugging starten, damit die Erweiterung eine Verbindung herstellen kann.
Windows
Klicken Sie mit der rechten Maustaste auf die Chrome-Verknüpfung und wählen Sie Eigenschaften aus. Fügen Sie im Feld "Ziel" --remote-debugging-port = 9222 hinzu. Führen Sie an einer Eingabeaufforderung /chrome.exe --remote-debugging-port = 9222 aus
OS X.
Führen Sie in einem Terminal / Applications / Google \ Chrome.app/Contents/MacOS/Google \ Chrome --remote-debugging-port = 9222 aus
Linux
Starten Sie in einem Terminal google-chrome --remote-debugging-port = 9222
Da die Add-Ons nicht mehr funktionieren, ist die Verwendung der hilfreichsten Tools, die ich gefunden habe, die Verwendung von Visual Studio / IE, da Sie Haltepunkte in Ihrem JS festlegen und Ihre Daten auf diese Weise überprüfen können. Natürlich haben Chrome und Firefox im Allgemeinen viel bessere Entwicklertools. Auch die gute alte console.log () war super hilfreich!
Antworten:
1. Chrome
Für Debug AngularJS in Chrome können Sie AngularJS Batarang verwenden . (Aus den letzten Bewertungen des Plugins geht hervor, dass AngularJS Batarang nicht mehr gewartet wird. Getestet in verschiedenen Versionen von Chrome funktioniert nicht)
Hier ist der Link für Beschreibung und Demo:
Einführung von Angular JS Batarang
Laden Sie das Chrome-Plugin hier herunter: Chrome-Plugin für das Debuggen von AngularJS
Sie können auch auf diesen Link verweisen: ng-book: Debugging AngularJS
Sie können ng-inspect auch zum Debuggen von Winkeln verwenden.
2. Firefox
Für Firefox können Sie mit Hilfe von Firebug den Code debuggen.
Verwenden Sie auch diese Firefox-Add-Ons: AngScope: Add-Ons für Firefox (keine offizielle Erweiterung durch das AngularJS-Team)
3. Debuggen von AngularJS : Überprüfen Sie den Link: Debuggen von AngularJS
quelle
ng-inspect
ob Batarang Ihnen Kopfschmerzen bereitet.IMHO, die frustrierendste Erfahrung kommt vom Erhalten / Festlegen eines Werts eines bestimmten Bereichs, der sich auf ein visuelles Element bezieht. Ich habe viele Haltepunkte nicht nur in meinem eigenen Code, sondern auch in angle.js selbst gesetzt, aber manchmal ist es einfach nicht der effektivste Weg. Obwohl die folgenden Methoden sehr leistungsfähig sind, werden sie definitiv als schlechte Praxis angesehen, wenn Sie sie tatsächlich im Produktionscode verwenden. Verwenden Sie sie also mit Bedacht!
Holen Sie sich eine Referenz in der Konsole von einem visuellen Element
In vielen Nicht-IE-Browsern können Sie ein Element auswählen, indem Sie mit der rechten Maustaste auf ein Element klicken und auf "Element überprüfen" klicken. Alternativ können Sie beispielsweise auch in Chrome auf ein beliebiges Element auf der Registerkarte "Elemente" klicken. Das zuletzt ausgewählte Element wird in einer Variablen
$0
in der Konsole gespeichert .Holen Sie sich einen Bereich, der mit einem Element verknüpft ist
Abhängig davon, ob eine Direktive vorhanden ist, die einen isolierten Bereich erstellt, können Sie den Bereich mit
angular.element($0).scope()
oder abrufenangular.element($0).isolateScope()
(verwenden,$($0).scope()
wenn $ aktiviert ist). Genau das erhalten Sie, wenn Sie die neueste Version von Batarang verwenden. Wenn Sie den Wert direkt ändern, denken Sie daran,scope.$digest()
die Änderungen auf der Benutzeroberfläche wiederzugeben.$ eval ist böse
Nicht unbedingt zum Debuggen.
scope.$eval(expression)
ist sehr praktisch, wenn Sie schnell überprüfen möchten, ob ein Ausdruck den erwarteten Wert hat.Die fehlenden Prototyp-Mitglieder des Geltungsbereichs
Der Unterschied zwischen
scope.bla
undscope.$eval('bla')
ist der erstere berücksichtigt nicht die prototypisch vererbten Werte. Verwenden Sie das folgende Snippet, um das gesamte Bild zu erhalten (Sie können den Wert nicht direkt ändern, aber Sie können ihn$eval
trotzdem verwenden!).Verwenden Sie es mit
scopeEval($($0).scope())
.Wo ist mein Controller?
Manchmal möchten Sie möglicherweise die Werte überwachen,
ngModel
wenn Sie eine Direktive schreiben. Verwenden Sie$($0).controller('ngModel')
und Sie werden das erhalten zu überprüfen$formatters
,$parsers
,$modelValue
,$viewValue
$render
und alles.quelle
Es gibt auch $ log, das Sie verwenden können! Es nutzt Ihre Konsole so, dass Sie möchten, dass sie funktioniert!
Zeigen Sie den Fehler / die Warnung / die Informationen so an, wie Ihre Konsole Sie normalerweise anzeigt!
Verwenden Sie dieses> Dokument
quelle
Obwohl die Frage beantwortet ist, könnte es interessant sein, einen Blick auf ng-inspector zu werfen
quelle
Versuchen Sie es mit ng-inspector. Laden Sie das Add-On für Firefox von der Website http://ng-inspector.org/ herunter . Es ist im Firefox-Add-On-Menü nicht verfügbar.
http://ng-inspector.org/ - Website
http://ng-inspector.org/ng-inspector.xpi - Firefox-Add-on
quelle
Leider zeigen die meisten Add-Ons und Browser-Erweiterungen nur die Werte an, aber Sie können keine Bereichsvariablen bearbeiten oder Winkelfunktionen ausführen. Wenn Sie die $ scope-Variablen in der Browserkonsole (in allen Browsern) ändern möchten, können Sie jquery verwenden. Wenn Sie jQuery vor AngularJS laden, kann angle.element ein jQuery-Selektor übergeben werden. So können Sie den Umfang eines Controllers mit überprüfen
Beispiel: Sie müssen den Wert der Variablen $ scope ändern und das Ergebnis im Browser anzeigen. Geben Sie dann einfach die Browserkonsole ein:
Sie können die Änderungen sofort in Ihrem Browser sehen. Der Grund, warum wir $ apply () verwendet haben, ist: Jede Bereichsvariable, die von außerhalb des Winkelkontexts aktualisiert wurde, aktualisiert ihre Bindung nicht. Sie müssen den Digest-Zyklus ausführen, nachdem Sie die Werte des Bereichs mit aktualisiert haben
scope.$apply()
.Um einen $ scope-Variablenwert zu beobachten, müssen Sie nur diese Variable aufrufen.
Beispiel: Sie möchten den Wert von $ scope.var1 in der Webkonsole in Chrome oder Firefox sehen. Geben Sie einfach Folgendes ein:
Das Ergebnis wird sofort in der Konsole angezeigt.
quelle
Fügen Sie einen Anruf an der Stelle hinzu,
debugger
an der Sie ihn verwenden möchten.console
Problem auf der Registerkarte der Webentwickler-Tools Ihres Browsersangular.reloadWithDebugInfo();
Besuchen Sie die Seite, die Sie debuggen möchten, oder laden Sie sie neu, und der Debugger wird in Ihrem Browser angezeigt.
quelle
scope () Wir können den $ scope vom Element (oder seinem übergeordneten Element) abrufen, indem wir die scope () -Methode für das Element verwenden:
Injektor ()
Mit diesem Injektor können wir dann jedes Angular-Objekt in unserer App instanziieren, z. B. Dienste, andere Controller oder jedes andere Objekt
quelle
Sie können 'Debugger' in Ihren Code einfügen und die App neu laden, wodurch der Haltepunkt dort platziert wird, und Sie können 'übergehen' oder ausführen.
quelle
Sie können mit in Entwicklertools integrierten Browsern debuggen.
Öffnen Sie die Entwicklertools im Browser und wechseln Sie zur Registerkarte "Quelle".
Öffnen Sie die Datei, die Sie debuggen möchten, mit Strg + P und suchen Sie den Dateinamen
Fügen Sie einen Haltepunkt in einer Zeile hinzu, indem Sie auf die linke Seite des Codes klicken.
Lade die Seite neu.
Es gibt viele Plugins zum Debuggen, auf die Sie für die Verwendung des Chrome-Plugins verweisen können. Debug Angular Application mit dem Plugin "Debugger for Chrome"
quelle
Für Visual Studio-Code (nicht Visual Studio) Ctrl+ Shift++P
Geben Sie Debugger for Chrome in die Suchleiste ein, installieren Sie es und aktivieren Sie es.
launch.json
Fügen Sie in Ihrer Datei diese Konfiguration hinzu:Sie müssen Chrome mit aktiviertem Remote-Debugging starten, damit die Erweiterung eine Verbindung herstellen kann.
Klicken Sie mit der rechten Maustaste auf die Chrome-Verknüpfung und wählen Sie Eigenschaften aus. Fügen Sie im Feld "Ziel" --remote-debugging-port = 9222 hinzu. Führen Sie an einer Eingabeaufforderung /chrome.exe --remote-debugging-port = 9222 aus
Führen Sie in einem Terminal / Applications / Google \ Chrome.app/Contents/MacOS/Google \ Chrome --remote-debugging-port = 9222 aus
Starten Sie in einem Terminal google-chrome --remote-debugging-port = 9222
Mehr finden ===>
quelle
Da die Add-Ons nicht mehr funktionieren, ist die Verwendung der hilfreichsten Tools, die ich gefunden habe, die Verwendung von Visual Studio / IE, da Sie Haltepunkte in Ihrem JS festlegen und Ihre Daten auf diese Weise überprüfen können. Natürlich haben Chrome und Firefox im Allgemeinen viel bessere Entwicklertools. Auch die gute alte console.log () war super hilfreich!
quelle
Möglicherweise können Sie Angular Augury verwenden. Eine Google Chrome Dev Tools-Erweiterung zum Debuggen von Angular 2-Anwendungen und höher.
quelle