Sto lavorando a una prova di concetto utilizzando JavaScript angolare.
Come eseguire il debug del codice JavaScript angolare in diversi browser (Firefox e Chrome)?
Sto lavorando a una prova di concetto utilizzando JavaScript angolare.
Come eseguire il debug del codice JavaScript angolare in diversi browser (Firefox e Chrome)?
Risposte:
1. Chrome
Per eseguire il debug di AngularJS in Chrome puoi utilizzare AngularJS Batarang . (Dalle recensioni recenti sul plugin sembra che AngularJS Batarang non sia più mantenuto. Testato in varie versioni di Chrome non funziona)
Ecco il link per la descrizione e la demo:
Introduzione di Angular JS Batarang
Scarica il plugin Chrome da qui: plugin Chrome per il debug di AngularJS
Puoi anche fare riferimento a questo link: ng-book: Debugging AngularJS
Puoi anche usare ng-inspect per il debug di angular.
2. Firefox
Per Firefox con l'aiuto di Firebug puoi eseguire il debug del codice.
Usa anche questi componenti aggiuntivi per Firefox : AngScope: componenti aggiuntivi per Firefox (estensione non ufficiale del team di AngularJS)
3. Debug di AngularJS : controlla il collegamento: Debug di AngularJS
ng-inspect
caso Batarang ti dà mal di testa.
IMHO, l'esperienza più frustrante deriva dall'ottenere / impostare un valore di uno scopo specifico correlato a un elemento visivo. Ho creato molti punti di interruzione non solo nel mio codice, ma anche in angular.js stesso, ma a volte semplicemente non è il modo più efficace. Sebbene i metodi seguenti siano molto potenti, sono sicuramente considerati una cattiva pratica se effettivamente utilizzati nel codice di produzione, quindi usali con saggezza!
In molti browser non IE, è possibile selezionare un elemento facendo clic con il pulsante destro del mouse su un elemento e facendo clic su "Ispeziona elemento". In alternativa puoi anche fare clic su qualsiasi elemento nella scheda Elementi in Chrome, ad esempio. L'ultimo elemento selezionato verrà memorizzato nella variabile $0
nella console.
A seconda che esista una direttiva che crea un ambito isolato, è possibile recuperare l'ambito con angular.element($0).scope()
o angular.element($0).isolateScope()
(utilizzare $($0).scope()
se $ è abilitato). Questo è esattamente ciò che ottieni quando utilizzi l'ultima versione di Batarang. Se stai modificando direttamente il valore, ricordati di utilizzare scope.$digest()
per riflettere le modifiche sull'interfaccia utente.
Non necessariamente per il debug. scope.$eval(expression)
è molto utile quando si desidera controllare rapidamente se un'espressione ha il valore atteso.
La differenza tra scope.bla
e scope.$eval('bla')
è il primo non considera i valori ereditati dal prototipo. Usa lo snippet qui sotto per ottenere l'intera immagine (non puoi modificare direttamente il valore, ma puoi usarlo $eval
comunque!)
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))
}
};
Usalo con scopeEval($($0).scope())
.
A volte potresti voler monitorare i valori ngModel
quando scrivi una direttiva. Usa $($0).controller('ngModel')
e si arriva a controllare il $formatters
, $parsers
, $modelValue
, $viewValue
$render
e tutto.
c'è anche $ log che puoi usare! fa uso della tua console in un modo in cui vuoi che funzioni!
mostrando l'errore / avviso / informazioni nel modo in cui la tua console ti mostra normalmente!
usa questo> Documento
Nonostante la risposta alla domanda, potrebbe essere interessante dare un'occhiata a ng-inspector
Prova ng-inspector. Scarica l'add-on per Firefox dal sito web http://ng-inspector.org/ . Non è disponibile nel menu aggiuntivo di Firefox.
http://ng-inspector.org/ - sito web
http://ng-inspector.org/ng-inspector.xpi - Componente aggiuntivo per Firefox
Sfortunatamente la maggior parte dei componenti aggiuntivi e delle estensioni del browser ti mostrano solo i valori ma non ti consentono di modificare le variabili di ambito o eseguire funzioni angolari. Se vuoi cambiare le variabili $ scope nella console del browser (in tutti i browser), puoi usare jquery. Se carichi jQuery prima di AngularJS, angular.element può essere passato a un selettore jQuery. Quindi potresti ispezionare l'ambito di un controller con
angular.element('[ng-controller="name of your controller"]').scope()
Esempio: è necessario modificare il valore della variabile $ scope e vedere il risultato nel browser, quindi digitare nella console del browser:
angular.element('[ng-controller="mycontroller"]').scope().var1 = "New Value";
angular.element('[ng-controller="mycontroller"]').scope().$apply();
Puoi vedere immediatamente le modifiche nel tuo browser. Il motivo per cui abbiamo usato $ apply () è: qualsiasi variabile di ambito aggiornata dall'esterno del contesto angolare non la aggiornerà vincolante, è necessario eseguire il ciclo digest dopo aver aggiornato i valori dell'ambito utilizzando scope.$apply()
.
Per osservare un valore di variabile $ scope, è sufficiente chiamare quella variabile.
Esempio: vuoi vedere il valore di $ scope.var1 nella console web in Chrome o Firefox digita semplicemente:
angular.element('[ng-controller="mycontroller"]').scope().var1;
Il risultato verrà mostrato immediatamente nella console.
Aggiungi la chiamata a debugger
dove intendi usarla.
someFunction(){
debugger;
}
Nella console
scheda degli strumenti per sviluppatori web del tuo browser, issueangular.reloadWithDebugInfo();
Visita o ricarica la pagina di cui intendi eseguire il debug e visualizza il debugger nel tuo browser.
var rootEle = document.querySelector("html");
var ele = angular.element(rootEle);
scope () Possiamo recuperare $ scope dall'elemento (o dal suo genitore) usando il metodo scope () sull'elemento:
var scope = ele.scope();
iniettore()
var injector = ele.injector();
Con questo iniettore, possiamo quindi istanziare qualsiasi oggetto angolare all'interno della nostra app, come servizi, altri controller o qualsiasi altro oggetto
Puoi aggiungere "debugger" nel tuo codice e ricaricare l'app, che mette lì il punto di interruzione e puoi "scavalcare" o eseguire.
var service = {
user_id: null,
getCurrentUser: function() {
debugger; // Set the debugger inside
// this function
return service.user_id;
}
Puoi eseguire il debug utilizzando i browser integrati negli strumenti per sviluppatori.
apri gli strumenti per sviluppatori nel browser e vai alla scheda sorgente.
apri il file di cui vuoi eseguire il debug usando Ctrl + P e cerca il nome del file
aggiungere un punto di interruzione su una riga facendo clic sul lato sinistro del codice.
ricarica la pagina.
Sono disponibili molti plug-in per il debug a cui puoi fare riferimento per l'utilizzo del plug-in di Chrome Debug dell'Applicazione angolare utilizzando il plug-in "Debugger per Chrome"
Per Visual Studio Code (non Visual Studio) fare Ctrl+ Shift+P
Digita Debugger per Chrome nella barra di ricerca, installalo e abilitalo.
Nel tuo launch.json
file aggiungi questa configurazione:
{
"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"
},
]
}
È necessario avviare Chrome con il debug remoto abilitato affinché l'estensione possa collegarsi ad esso.
Fai clic con il pulsante destro del mouse sul collegamento Chrome e seleziona proprietà Nel campo "target", aggiungi --remote-debugging-port = 9222 Oppure in un prompt dei comandi, esegui /chrome.exe --remote-debugging-port = 9222
In un terminale, esegui / Applications / Google \ Chrome.app/Contents/MacOS/Google \ Chrome --remote-debugging-port = 9222
In un terminale, avvia google-chrome --remote-debugging-port = 9222
Poiché i componenti aggiuntivi non funzionano più, il set di strumenti più utile che ho trovato è l'utilizzo di Visual Studio / IE perché puoi impostare punti di interruzione nel tuo JS e ispezionare i tuoi dati in questo modo. Ovviamente Chrome e Firefox hanno strumenti di sviluppo molto migliori in generale. Inoltre, il buon vecchio 'console.log () è stato di grande aiuto!
Forse puoi utilizzare Angular Augury A estensione di Google Chrome Dev Tools per il debug di applicazioni Angular 2 e successive.