Comment déboguer le Code Javascript angulaire

Je travaille sur une preuve de concept en utilisant Angular JavaScript.

Comment déboguer le code Javascript angulaire dans différents navigateurs (Firefox et Chrome)?

99
demandé sur AskQuestion 2013-09-13 12:49:51

13 réponses

1. Chrome

Pour Debug AngularJS dans chrome vous pouvez utiliser AngularJS Batarang. (D'après des critiques récentes sur le plugin, il semble que AngularJS Batarang ne soit plus maintenu. Testé dans diverses versions de chrome ne fonctionne pas)

Voici le Lien pour la description et la Démo:

Introduction de JS angulaire Batarang

Télécharger chrome plugin à partir d'ici: chrome plugin pour debug AngularJS

Vous pouvez aussi consultez ce lien: ng-livre: le Débogage AngularJS

Vous pouvez également utiliser ng-inspect pour déboguer angular.

2. Firefox

Pour Firefox avec l'aide de Firebug vous pouvez déboguer le code.

Utilisez également ce Firefox Add-Ons: AngScope: Add - ons pour Firefox (extension non officielle par AngularJS Team)

3. Débogage AngularJS : Vérifiez le lien: débogage AngularJS

63
répondu Vaibhav Jain 2015-11-23 06:28:53

À mon humble avis, l'expérience la plus frustrante vient d'obtenir / définir une valeur d'une portée spécifique liée à un élément visuel. J'ai fait beaucoup de points d'arrêt non seulement dans mon propre code, mais aussi dans angulaire.js lui-même, mais parfois ce n'est tout simplement pas le moyen le plus efficace. Bien que les méthodes ci-dessous soient très puissantes, elles sont définitivement considérées comme une mauvaise pratique si vous les utilisez réellement dans le code de production, alors utilisez-les à bon escient!

Obtenir une référence dans la console à partir d'un visuel élément

Dans de nombreux navigateurs non-IE, vous pouvez sélectionner un élément en cliquant avec le bouton droit sur un élément et en cliquant sur "Inspecter L'élément". Vous pouvez également cliquer sur un élément dans L'onglet Éléments dans Chrome, par exemple. Le dernier élément sélectionné sera stocké dans la variable $0 dans la console.

Obtenir une portée liée à un élément

Selon qu'il existe une directive qui crée un isolat champ d'application, vous pouvez récupérer la portée par angular.element($0).scope() ou angular.element($0).isolateScope() (utiliser $($0).scope() si $ est permettre). C'est exactement ce que vous obtenez lorsque vous utilisez la dernière version de Batarang. Si vous modifiez la valeur directement, n'oubliez pas d'utiliser scope.$digest() pour refléter les modifications sur L'interface utilisateur.

$ eval est mauvais

Pas nécessairement pour le débogage. scope.$eval(expression) est très pratique lorsque vous voulez vérifier rapidement si une expression a la valeur attendue.

Les prototypes manquants de scope

La différence entre scope.bla et scope.$eval('bla') est l'ancien ne considère pas la valeurs héritées prototypiquement. Utilisez l'extrait ci-dessous pour obtenir l'image complète (vous ne pouvez pas modifier directement la valeur, mais vous pouvez utiliser $eval de toute façon!)

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))
    }
};

Utilisez-le avec scopeEval($($0).scope()).

Où est mon contrôleur?

Parfois, vous pouvez surveiller les valeurs dans ngModel lorsque vous écrivez une directive. Utiliser $($0).controller('ngModel') et vous aurez pour vérifier l'$formatters, $parsers, $modelValue, $viewValue $render et tout et tout.

28
répondu Osbert Ngok 2015-03-23 11:29:33

Il y a aussi $log que vous pouvez utiliser! il utilise votre console d'une manière que vous voulez qu'elle fonctionne!

Affichage de l'erreur / avertissement / info de la façon dont votre console vous montre normalement!

Utiliser ce > Document

13
répondu Ali RAN 2013-12-19 05:47:03

Malgré la réponse à la question, il pourrait être intéressant de jeter un oeil à ng-inspector

10
répondu Iker Aguayo 2015-01-20 09:28:34

Essayer ng-inspecteur. Télécharger l'add - on pour Firefox à partir du site http://ng-inspector.org/. Il n'est pas disponible dans le menu Firefox add on.

Http://ng-inspector.org/ - site web

Http://ng-inspector.org/ng-inspector.xpi - Module complémentaire Firefox

7
répondu Akash 2015-08-22 12:38:07

Malheureusement, la plupart des add-ons et des extensions de navigateur ne font que vous montrer les valeurs, mais ils ne vous permettent pas d'éditer des variables de portée ou d'exécuter des fonctions angulaires. Si vous voulez changer les variables $ scope dans la console du navigateur (dans tous les navigateurs), vous pouvez utiliser jquery. Si vous chargez jQuery avant AngularJS, angular.élément peut être passé un sélecteur jQuery. Vous pouvez donc inspecter la portée d'un contrôleur avec

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

Exemple: Vous devez modifier la valeur de la variable $scope et voir le résultat dans le navigateur puis tapez simplement dans la console du navigateur:

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

, Vous pouvez voir les changements dans votre navigateur immédiatement. La raison pour laquelle nous avons utilisé $apply() est: toute variable de portée mise à jour à partir du contexte angulaire extérieur ne la mettra pas à jour, vous devez exécuter le cycle digest après la mise à jour des valeurs de la portée en utilisant scope.$apply() .

Pour observer une valeur de variable $ scope, il vous suffit d'appeler cette variable.

Exemple: Vous voulez voir la valeur de $ scope.var1 dans la console web dans Chrome ou Firefox, tapez simplement:

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

Le résultat sera affiché dans la console immédiatement.

6
répondu Iman Sedighi 2015-12-08 05:55:30
var rootEle = document.querySelector("html");
var ele = angular.element(rootEle); 

Champ d'application() Nous pouvons récupérer le $ scope de l'élément (ou de son parent) en utilisant la méthode scope () sur le élément:

var scope = ele.scope();

Injecteur()

var injector = ele.injector();

Avec cet injecteur, nous pouvons ensuite instancier n'importe quel objet angulaire à l'intérieur de notre application, tels que les services, autres contrôleurs, ou tout autre objet

3
répondu zloctb 2015-09-07 09:56:01

Ajouter un appel de debugger où vous avez l'intention de l'utiliser.

someFunction(){
  debugger;
}

Dans l'onglet console des outils de développement web de votre navigateur, émettez angular.reloadWithDebugInfo();

Visitez ou rechargez la page que vous avez l'intention de déboguer et voyez le débogueur apparaître dans votre navigateur.

3
répondu Tass 2016-11-08 17:08:44

Vous pouvez ajouter "débogueur" dans votre code et recharger l'application, ce qui met le point d'arrêt là et vous pouvez "passer", ou exécuter.

var service = {
user_id: null,
getCurrentUser: function() {
  debugger; // Set the debugger inside 
            // this function
  return service.user_id;
}
2
répondu Rk R Bairi 2016-01-13 17:34:55

Pour le code Visual Studio (pas Visual Studio) faites Ctrl+décalage+P

Tapez débogueur pour Chrome dans la barre de recherche, installez-le et activez-le.

Dans votre fichier launch.json Ajoutez cette configuration:

{
    "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"
        },
    ]
}

Vous devez lancer Chrome avec le débogage à distance activé pour que l'extension puisse s'y attacher.

  • fenêtres

Cliquez avec le bouton droit sur le raccourci Chrome, puis sélectionnez Propriétés Dans le champ "cible", " ajouter --à distance-débogage-port = 9222 Ou dans une invite de commande, Exécuter / chrome.exe --remote-débogage-port=9222

  • OS X

Dans un terminal, exécutez / Applications / Google \ Chrome.app / Contents / MacOS/ Google \ Chrome --Remote-debugging-port = 9222

  • Linux

Dans un terminal, lancez google chrome --remote-débogage-port=9222

Trouver Plus De ===>

1
répondu Ze Rubeus 2018-01-19 11:37:58

Puisque les add-ons ne fonctionnent plus, l'ensemble d'outils le plus utile que j'ai trouvé utilise Visual Studio/IE parce que vous pouvez définir des points d'arrêt dans votre JS et inspecter vos données de cette façon. Bien sûr, Chrome et Firefox ont de bien meilleurs outils de développement en général. Aussi, bonne vieille console.log() a été super utile!

0
répondu Sara Inés Calderón 2016-02-02 20:54:14

Peut-être que vous pouvez utiliser Angular Augury une extension Google Chrome Dev Tools pour déboguer les applications Angular 2 et supérieures.

0
répondu aligokayduman 2017-11-07 18:24:43

Vous pouvez déboguer à l'aide des navigateurs intégrés aux outils de développement.

  1. Ouvrez developer tools dans le navigateur et accédez à l'onglet source.

  2. Ouvrez le fichier que vous souhaitez déboguer en utilisant Ctrl + P et recherchez le nom du fichier

  3. Ajouter un point de rupture sur une ligne ny en cliquant sur le côté gauche du code.

  4. Actualisez la page.

Il y a beaucoup de plug-in disponibles pour le débogage, vous pouvez vous référer pour l'utilisation de chrome plugin Debug Angular Application en utilisant "Débogueur pour chrome" plugin

0
répondu Dharmaraj Kavatagi 2018-07-19 19:05:47