Comment puis-je accéder à l' $portée variable dans le navigateur de la console en utilisant AngularJS?
Je voudrais accéder à mon $scope
variable dans la console JavaScript de Chrome. Comment dois-je faire?
Je ne peux ni voir $scope
ni le nom de mon module myapp
dans la console comme des variables.
- Pour le débogage je
window.MY_SCOPE = $scope;
première chose dans ma fonction de contrôleur. - Si vous envisagez de développement/test dans Firefox, vous pouvez également utiliser AngScope, une petite extension qui affiche
$scope
objets de certains éléments du DOM dans Firebug de l'Inspecteur DOM. - pourquoi ne pas utiliser la fenêtre.$portée = $champ d'application, de sorte que vous pouvez simplement utiliser $champ d'application plutôt que de MY_SCOPE - je n'ai pas remarqué de problèmes, mais peut-être que je vais manquer un problème de sécurité ou de quelque chose.
- Juste pour plus de clarté, quelqu'un de nouveau angulaire pourrait se confondre et je pense que $a été portée par magie disponible dans la console si le juste vu qu'il est utilisé de cette façon. Aussi, si vous puis par erreur d'utilisation champ d'application de la directive de déclaration et de $champ d'application dans le code, par exemple, vous seriez à l'aide que sur l'objet de la fenêtre au lieu de se faire une erreur.
Vous devez vous connecter pour publier un commentaire.
Choisissez un élément dans le panneau HTML des outils de développement et tapez ceci dans la console:
Dans WebKit et Firefox,
$0
est une référence à la sélection des nœuds du DOM dans l'onglet éléments, en faisant cela, vous obtenez sélectionnés nœud DOM portée imprimées dans la console.Vous pouvez également cibler le champ d'application par l'ID de l'élément, comme suit:
Addons/Extensions
Il y a quelques très utile extensions de Chrome que vous pourriez vouloir vérifier:
Batarang. Cela a été autour pendant un certain temps.
ng-inspecteur. C'est le plus récent, et comme son nom l'indique, elle vous permet d'inspecter votre application étendues.
Jouer avec jsFiddle
Lorsque l'on travaille avec jsfiddle vous pouvez ouvrir le violon dans montrer mode en ajoutant
/show
à la fin de l'URL. Lors de l'exécution comme cela, vous avez accès à laangular
mondiale. Vous pouvez essayer ici:http://jsfiddle.net/jaimem/Yatbt/show
jQuery Lite
Si vous charger jQuery avant AngularJS,
angular.element
peut être passé un sélecteur jQuery. Vous pourriez donc à inspecter l'étendue d'un contrôleur avecD'un bouton
... et ainsi de suite.
Vous pourriez voulez vraiment utiliser une fonction globale pour le rendre plus facile:
Maintenant vous pouvez le faire
Vérifier ici: http://jsfiddle.net/jaimem/DvRaR/1/show/
angular.element($0).scope()
, il fonctionne jusqu'à ce que vous essayez d'appeler des méthodes. J'ai essayé, et pour une raison pas de requêtes HTTP sont possibles dans cette configuration?<top frame>
et que vous souhaitez récupérerresult( fiddle.jsshell.net/ )
d'avoir la console dans le cadre de l'exécution de cadre.Pour améliorer la réponse de jm...
Ou si vous utilisez jQuery, cela fait la même chose...
Un autre moyen facile d'accéder à un élément du DOM à partir de la console (comme jm mentionné) est de cliquer sur dans la "éléments" de l'onglet, et obtient automatiquement stockés en tant que
$0
.angular.element(document.body).scope()
, merci!Si vous avez installé Batarang
Alors vous pouvez simplement écrire:
lorsque vous avez l'élément sélectionné dans les éléments à afficher dans le navigateur chrome.
Ref - https://github.com/angular/angularjs-batarang#console
C'est un moyen d'arriver à portée sans Batarang, vous pouvez le faire:
Ou si vous voulez trouver votre portée par le nom du contrôleur, ce faire:
Après vous apportez des modifications à votre modèle, vous aurez besoin pour appliquer les modifications aux DOM en appelant le:
angular.element
est déjà un élément de la méthode de sélection. Arrêtez de dire vous avez besoin de jQuery pour des tâches simples comme sélectionner un élément par son id!angular.element
déjà la chose, vous êtes à l'aide de jQuery pour. En fait, si jQuery est disponibleangular.element
est un alias pour jQuery. Vous êtes inutilement compliquer votre code.angular.element('#selectorId')
etangular.element('[ng-controller=myController]')
faire la même chose, seulement avec moins de code. Vous pourrait aussi bien appelerangular.element('#selectorId'.toString())
angular.element
sera un alias pour jQuery, si, si non il sera un jQLite objet. Si c'est le cas, son.find()
n'aura pas les mêmes fonctionnalités. Selon les docs:find() - Limited to lookups by tag name
. Pensé que ce serait intéressant d'ajouter pour d'autre qui ne réalisent pas que la lecture de ce. (Comme moi à l'origine).Quelque part dans votre contrôleur (souvent la dernière ligne est un bon endroit), mettre
Si vous voulez voir un intérieur/étendue implicite, dire à l'intérieur d'une ng-repeat, quelque chose de ce genre de travail.
Puis dans votre contrôleur
Remarque que ci-dessus, nous définissons les showScope() en fonction de la portée parent, mais c'est bien... l'enfant/intérieur/étendue implicite pouvez accéder à cette fonction, qui imprime ensuite le champ d'application basé sur l'événement, et donc la portée associée à l'élément qui a déclenché l'événement.
@jm-suggestion fonctionne aussi,
mais je ne pense pas que cela fonctionne à l'intérieur d'un jsFiddle. J'ai cette erreur sur jsFiddle à l'intérieur de Chrome:Une mise en garde à plusieurs de ces réponses: si vous alias de votre contrôleur à votre portée les objets dans un objet à l'intérieur de l'objet renvoyé de
scope()
.Par exemple, si votre contrôleur de la directive est créé comme suit:
<div ng-controller="FormController as frm">
ensuite, pour accéder à un
startDate
propriété de votre contrôleur, vous appelezangular.element($0).scope().frm.startDate
$scope
, nommé$ctrl
par défaut, indépendamment de savoir si vous renommez-le en utilisantcontrollerAs
ou pas. Je ne comprends pas où vous avez vu un "mise en garde" dans les réponses existantes. Remarque la plupart des réponses ont été fournies en arrière quandcontrollerAs
était pas une pratique courante.controllerAs
était pas une pratique courante, de sorte qu'il a été source de confusion pour les débutants qui peuvent avoir été à la suite d'un "livre de cuisine" qui a été dit pour alias le contrôleur, mais alors pas voir les propriétés sans l'aide de l'alias. Les choses évoluent vite il y a deux ans.Je suis d'accord le mieux est Batarang avec
$scope
après la sélection d'un objet (c'est le même queangular.element($0).scope()
ou même plus courte avec jQuery:$($0).scope()
(mon préféré))Aussi, si comme moi vous avez de vous principal portée sur la
body
élément, un$('body').scope()
fonctionne très bien.D'ajouter et d'améliorer les autres réponses, dans la console, entrez
$($0)
pour récupérer l'élément. Si c'est une application Angularjs, jQuery version lite est chargé par défaut.Si vous n'êtes pas à l'aide de jQuery, vous pouvez utiliser angulaire.élément($0) comme dans:
Pour vérifier si vous avez jQuery et la version, exécutez cette commande dans la console:
Si vous avez inspecté un élément, l'élément actuellement sélectionné est disponible via la ligne de commande référence de l'API de $0. Les deux Firebug et Chrome ont cette référence.
Cependant, les outils de développement Chrome mettra à la disposition de la dernière des cinq éléments (ou de tas d'objets) sélectionné par les propriétés nommé $0, $1, $2, $3, $4 l'utilisation de ces références. Plus récemment, l'élément ou l'objet peut être référencé en tant que $0, la deuxième plus récente que 1 $et ainsi de suite.
Ici est la Ligne de commande référence de l'API pour Firebug que la liste des références.
$($0).scope()
sera de retour à la portée associée à l'élément. Vous pouvez voir ses propriétés tout de suite.Quelques autres choses que vous pouvez utiliser sont:
$($0).scope().$parent
.$($0).scope().$parent.$parent
$($0).scope().$root
$($0).isolateScope()
Voir Trucs et Astuces pour le Débogage Inconnu Code Angularjs pour plus de détails et d'exemples.
Inspecter l'élément, puis de les utiliser dans la console
Suffit d'attribuer
$scope
comme une variable globale. Le problème est résolu.Nous avons en fait besoin
$scope
plus souvent dans le développement que dans la production.Déjà mentionné par @JasonGoemaat mais l'ajouter comme une réponse appropriée à cette question.
J'ai utilisé
angular.element($(".ng-scope")).scope();
dans le passé et il fonctionne très bien. Seulement bon si vous avez une seule application sur la page, ou vous pouvez faire quelque chose comme:angular.element($("div[ng-controller=controllerName]")).scope();
ouangular.element(document.getElementsByClassName("ng-scope")).scope();
J'ai l'habitude d'utiliser jQuery fonction data() pour qui:
L' $0 est l'élément actuellement sélectionné dans chrome inspecteur DOM.
$1, $2 ... et ainsi de suite, sont des éléments précédemment sélectionnés.
Dites que vous voulez accéder à la portée de l'élément comme
Vous pouvez utiliser les éléments suivants dans la console:
Cela va vous donner de la portée à cet élément.
Mettre un point d'arrêt dans votre code à un endroit à proximité d'une référence à l' $portée variable (de sorte que la somme de champ est dans le "bon vieux JavaScript" champ d'application). Ensuite, vous pouvez inspecter l' $la valeur de la portée dans la console.
angulaire nous obtenons jquery élément angulaire.(élément)....
permet de c...
exemple:
<div id=""></div>
Au Chrome de la console :
Exemple
Chrome console
Uniquement pour des fins de débogage je crois que c'est le début de la manette.
Et c'est de cette façon que je l'utilise.
de le supprimer quand je suis en fait le débogage.
Cela nécessite jQuery pour être installé en tant que bien, mais fonctionne parfaitement pour un environnement de dev. Il regarde à travers chaque élément pour obtenir le cas des champs puis les renvoie étiquetés avec les noms de contrôleur. C'est aussi la suppression de toute propriété de commencer avec un $ qui est ce que angularjs utilise généralement pour les sa configuration.
Il suffit de définir une variable JavaScript en dehors de la portée et de l'assigner à votre portée dans votre contrôleur:
Que c'est! Il devrait fonctionner sur tous les navigateurs (testé au moins dans google Chrome, et Mozilla).
Il est au travail, et je suis en utilisant cette méthode.