Je souhaite accéder à ma $scope
variable dans la console JavaScript de Chrome. Comment je fais ça?
Je ne vois $scope
ni le nom de mon module myapp
dans la console sous forme de variables.
angularjs
angularjs-scope
murtaza52
la source
la source
window.MY_SCOPE = $scope;
première chose dans la fonction de mon contrôleur.$scope
objets des éléments DOM sélectionnés dans l'inspecteur DOM de Firebug.Réponses:
Choisissez un élément dans le panneau HTML des outils de développement et saisissez-le dans la console:
Dans WebKit et Firefox,
$0
est une référence au nœud DOM sélectionné dans l'onglet Éléments, donc en faisant cela, vous obtenez la portée du nœud DOM sélectionné imprimée dans la console.Vous pouvez également cibler la portée par ID d'élément, comme ceci:
Extensions / extensions
Il existe des extensions Chrome très utiles que vous voudrez peut-être consulter:
Batarang . Cela existe depuis un certain temps.
ng-inspecteur . C'est le plus récent, et comme son nom l'indique, il vous permet d'inspecter les étendues de votre application.
Jouer avec jsFiddle
Lorsque vous travaillez avec jsfiddle, vous pouvez ouvrir le violon en mode show en ajoutant
/show
à la fin de l'URL. Lorsque vous exécutez comme ceci, vous avez accès auangular
global. Vous pouvez l'essayer ici:http://jsfiddle.net/jaimem/Yatbt/show
jQuery Lite
Si vous chargez jQuery avant AngularJS, vous
angular.element
pouvez passer un sélecteur jQuery. Vous pouvez donc inspecter la portée d'un contrôleur avecD'un bouton
... etc.
Vous voudrez peut-être utiliser une fonction globale pour le rendre plus facile:
Maintenant tu peux faire ça
Vérifiez ici: http://jsfiddle.net/jaimem/DvRaR/1/show/
la source
angular.element($0).scope()
, cela fonctionne jusqu'à ce que vous essayiez d'appeler certaines méthodes. J'ai essayé, et pour une raison quelconque, aucune demande HTTP n'est possible dans cette configuration?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 DOM à partir de la console (comme l'a mentionné jm) consiste à cliquer dessus dans l'onglet «Éléments», et il est automatiquement stocké sous
$0
.la source
angular.element(document.body).scope()
, merci!Si vous avez installé Batarang
Ensuite, vous pouvez simplement écrire:
lorsque vous avez l'élément sélectionné dans la vue des éléments en chrome. Réf - https://github.com/angular/angularjs-batarang#console
la source
C'est un moyen de se rendre à portée sans Batarang, vous pouvez faire:
Ou si vous souhaitez trouver votre portée par nom de contrôleur, procédez comme suit:
Après avoir apporté des modifications à votre modèle, vous devrez appliquer les modifications au DOM en appelant:
la source
angular.element
est déjà une méthode de sélection d'élément. Arrêtez de dire que vous avez besoin de jQuery pour des tâches simples comme la sélection d'un élément par son identifiant!angular.element
fait déjà la chose pour laquelle vous utilisez jQuery. En fait, si jQuery est disponible,angular.element
c'est un alias pour jQuery. Vous compliquez inutilement votre code.angular.element('#selectorId')
etangular.element('[ng-controller=myController]')
faites la même chose, mais avec moins de code. Vous pourriez aussi bien appelerangular.element('#selectorId'.toString())
Quelque part dans votre contrôleur (souvent la dernière ligne est un bon endroit), mettez
Si vous voulez voir une portée interne / implicite, disons à l'intérieur d'une répétition ng, quelque chose comme ça fonctionnera.
Puis dans votre manette
Notez que ci-dessus, nous définissons la fonction showScope () dans la portée parent, mais ce n'est pas grave ... la portée enfant / intérieure / implicite peut accéder à cette fonction, qui imprime ensuite la portée en fonction de l'événement, et donc la portée associée à l'élément qui a déclenché l'événement.
La suggestion de @ jm- fonctionne également,
mais je ne pense pas que cela fonctionne à l'intérieur d'un jsFiddle. Je reçois cette erreur sur jsFiddle dans Chrome:la source
Une mise en garde à plusieurs de ces réponses: si vous alias votre contrôleur, vos objets de portée se trouveront dans un objet de l'objet renvoyé
scope()
.Par exemple, si votre directive contrôleur est créée comme ceci:
<div ng-controller="FormController as frm">
alors pour accéder à unestartDate
propriété de votre contrôleur, vous appelleriezangular.element($0).scope().frm.startDate
la source
$scope
, nommé$ctrl
par défaut, indépendamment du fait que vous le renommiez en utilisantcontrollerAs
ou non. Je ne comprends pas où vous avez vu une "mise en garde" dans les réponses existantes. Notez que la plupart des réponses ici ont été fournies alors que cecontrollerAs
n'était pas une pratique courante.controllerAs
n'était pas une pratique courante, donc c'était déroutant pour les débutants qui suivaient peut-être un "livre de cuisine" qui leur disait d'alias le contrôleur, mais de ne pas voir les propriétés sans utiliser l'alias. Les choses allaient vite il y a deux ans.Je suis d'accord que le meilleur est Batarang avec c'est
$scope
après avoir sélectionné un objet (c'est le mêmeangular.element($0).scope()
ou même plus court avec jQuery:$($0).scope()
(mon préféré))De plus, si comme moi vous avez votre portée principale sur l'
body
élément, cela$('body').scope()
fonctionne très bien.la source
Pour ajouter et améliorer les autres réponses, dans la console, entrez
$($0)
pour obtenir l'élément. S'il s'agit d'une application Angularjs, une version jQuery lite est chargée par défaut.Si vous n'utilisez pas jQuery, vous pouvez utiliser angular.element ($ 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 référence d'API de ligne de commande $ 0. Firebug et Chrome ont cette référence.
Cependant, les outils de développement Chrome rendront disponibles les cinq derniers éléments (ou objets de tas) sélectionnés via les propriétés nommées $ 0, $ 1, $ 2, $ 3, $ 4 en utilisant ces références. L'élément ou l'objet sélectionné le plus récemment peut être référencé comme $ 0, le deuxième plus récent comme $ 1 et ainsi de suite.
Voici la référence de l'API de ligne de commande pour Firebug qui répertorie ses références.
$($0).scope()
retournera la portée associée à l'élément. Vous pouvez voir ses propriétés tout de suite.Certaines autres choses que vous pouvez utiliser sont:
$($0).scope().$parent
.$($0).scope().$parent.$parent
$($0).scope().$root
$($0).isolateScope()
Voir Trucs et astuces pour déboguer le code Angularjs inconnu pour plus de détails et d'exemples.
la source
Inspectez l'élément, puis utilisez-le dans la console
la source
Attribuez simplement
$scope
une variable globale. Problème résolu.Nous avons en fait besoin
$scope
plus souvent en développement qu'en production.Mentionné déjà par @JasonGoemaat mais en l'ajoutant comme réponse appropriée à cette question.
la source
Je l'ai utilisé
angular.element($(".ng-scope")).scope();
dans le passé et cela fonctionne très bien. Ce n'est bon que si vous n'avez qu'une seule étendue d'application sur la page, ou si vous pouvez faire quelque chose comme:angular.element($("div[ng-controller=controllerName]")).scope();
ouangular.element(document.getElementsByClassName("ng-scope")).scope();
la source
J'utilise généralement la fonction jQuery data () pour cela:
L'élément $ 0 est actuellement sélectionné dans l'inspecteur DOM Chrome. $ 1, $ 2 .. et ainsi de suite sont des éléments précédemment sélectionnés.
la source
Supposons que vous souhaitiez accéder à la portée de l'élément comme
Vous pouvez utiliser les éléments suivants dans la console:
Cela vous donnera la portée de cet élément.
la source
Sur la console de Chrome:
Exemple
Console de Chrome
la source
Cela nécessite que jQuery soit également installé, mais fonctionne parfaitement pour un environnement de développement. Il examine chaque élément pour obtenir les instances des étendues, puis les renvoie étiquetées avec leurs noms de contrôleur. Il supprime également toute propriété commençant par un $, ce que angularjs utilise généralement pour sa configuration.
la source
en angulaire on obtient l'élément jquery par angular.element () .... laisse c ...
exemple:
<div id=""></div>
la source
À des fins de débogage uniquement, je mets cela au début du contrôleur.
Et c'est comme ça que je l'utilise.
puis supprimez-le lorsque j'ai terminé le débogage.
la source
Placez un point d'arrêt dans votre code à un endroit proche d'une référence à la variable $ scope (de sorte que $ scope se trouve dans la portée 'plain old JavaScript'). Ensuite, vous pouvez inspecter la valeur $ scope dans la console.
la source
Définissez simplement une variable JavaScript en dehors de la portée et affectez-la à votre portée dans votre contrôleur:
C'est ça! Il devrait fonctionner dans tous les navigateurs (testé au moins dans Chrome et Mozilla).
Cela fonctionne, et j'utilise cette méthode.
la source