Ich möchte auf meine $scope
Variable in der JavaScript-Konsole von Chrome zugreifen. Wie mache ich das?
Ich kann weder $scope
den Namen meines Moduls myapp
in der Konsole als Variablen sehen noch.
angularjs
angularjs-scope
murtaza52
quelle
quelle
window.MY_SCOPE = $scope;
erstes meine Controller-Funktion ein.$scope
Objekte ausgewählter DOM-Elemente in Firebugs DOM Inspector anzeigt .Antworten:
Wählen Sie im HTML-Bereich der Entwicklertools ein Element aus und geben Sie dieses in die Konsole ein:
In WebKit und Firefox
$0
wird auf der Registerkarte "Elemente" auf den ausgewählten DOM-Knoten verwiesen. Auf diese Weise wird der ausgewählte DOM-Knotenbereich in der Konsole ausgedruckt.Sie können den Bereich auch nach Element-ID ausrichten, z. B.:
Addons / Erweiterungen
Es gibt einige sehr nützliche Chrome-Erweiterungen, die Sie möglicherweise ausprobieren möchten:
Batarang . Das gibt es schon eine Weile.
ng-inspector . Dies ist die neueste Version, mit der Sie, wie der Name schon sagt, die Bereiche Ihrer Anwendung überprüfen können.
Mit jsFiddle spielen
Wenn Sie mit jsfiddle arbeiten, können Sie die Geige im Show- Modus öffnen , indem Sie sie
/show
am Ende der URL hinzufügen . Wenn Sie so laufen, haben Sie Zugriff auf dieangular
globale. Sie können es hier versuchen:http://jsfiddle.net/jaimem/Yatbt/show
jQuery Lite
Wenn Sie jQuery vor AngularJS laden,
angular.element
kann ein jQuery-Selektor übergeben werden. So können Sie den Umfang eines Controllers mit überprüfenVon einem Knopf
... und so weiter.
Möglicherweise möchten Sie tatsächlich eine globale Funktion verwenden, um dies zu vereinfachen:
Jetzt könnten Sie dies tun
Überprüfen Sie hier: http://jsfiddle.net/jaimem/DvRaR/1/show/
quelle
angular.element($0).scope()
funktioniert es, bis Sie versuchen, einige Methoden aufzurufen. Ich habe es versucht und aus irgendeinem Grund sind in diesem Setup keine HTTP-Anforderungen möglich.Um die Antwort von jm zu verbessern ...
Oder wenn Sie jQuery verwenden, funktioniert dies genauso ...
Eine andere einfache Möglichkeit, über die Konsole auf ein DOM-Element zuzugreifen (wie von jm erwähnt), besteht darin, auf der Registerkarte "Elemente" darauf zu klicken, und es wird automatisch als gespeichert
$0
.quelle
angular.element(document.body).scope()
, danke!Wenn Sie Batarang installiert haben
Dann können Sie einfach schreiben:
Wenn Sie das Element in der Elementansicht in Chrom ausgewählt haben. Ref - https://github.com/angular/angularjs-batarang#console
quelle
Dies ist ein Weg, um ohne Batarang zum Ziel zu gelangen. Sie können Folgendes tun:
Oder wenn Sie Ihren Bereich anhand des Controllernamens ermitteln möchten, gehen Sie folgendermaßen vor:
Nachdem Sie Änderungen an Ihrem Modell vorgenommen haben, müssen Sie die Änderungen auf das DOM anwenden, indem Sie Folgendes aufrufen:
quelle
angular.element
ist bereits eine Elementauswahlmethode. Hören Sie auf zu sagen, dass Sie jQuery für einfache Aufgaben wie die Auswahl eines Elements anhand seiner IDangular.element
macht bereits das, wofür Sie jQuery verwenden. Wenn jQuery verfügbarangular.element
ist, ist dies ein Alias für jQuery. Sie komplizieren Ihren Code unnötig.angular.element('#selectorId')
undangular.element('[ng-controller=myController]')
machen Sie dasselbe, nur mit weniger Code. Sie können genauso gut anrufenangular.element('#selectorId'.toString())
Irgendwo in Ihrem Controller (oft ist die letzte Zeile ein guter Ort), setzen Sie
Wenn Sie einen inneren / impliziten Bereich sehen möchten, z. B. innerhalb einer ng-Wiederholung, funktioniert so etwas.
Dann in Ihrem Controller
Beachten Sie, dass wir oben die Funktion showScope () im übergeordneten Bereich definieren, aber das ist in Ordnung ... der untergeordnete / innere / implizite Bereich kann auf diese Funktion zugreifen, die dann den Bereich basierend auf dem Ereignis und damit den damit verbundenen Bereich ausgibt das Element, das das Ereignis ausgelöst hat.
Der Vorschlag von @ jm-´ funktioniert auch,
aber ich glaube nicht, dass er in einer jsFiddle funktioniert. Ich erhalte diesen Fehler auf jsFiddle in Chrome:quelle
Eine Einschränkung für viele dieser Antworten: Wenn Sie Ihren Controller als Alias verwenden, befinden sich Ihre Bereichsobjekte in einem Objekt innerhalb des zurückgegebenen Objekts von
scope()
.Wenn Ihre Controller-Direktive beispielsweise so erstellt wird: Um
<div ng-controller="FormController as frm">
auf einestartDate
Eigenschaft Ihres Controllers zuzugreifen , würden Sie aufrufenangular.element($0).scope().frm.startDate
quelle
$scope
, mit dem Namen$ctrl
standardmäßig unabhängig davon , ob Sie benennen Sie es mitcontrollerAs
oder nicht. Ich verstehe nicht, wo Sie in vorhandenen Antworten eine "Einschränkung" gesehen haben . Beachten Sie, dass die meisten Antworten hier zurückgegeben wurden, als diescontrollerAs
nicht üblich war.controllerAs
war dies keine gängige Praxis, daher war es für Neulinge verwirrend, die möglicherweise einem "Kochbuch" gefolgt waren, in dem sie aufgefordert wurden, den Controller als Alias zu verwenden, die Eigenschaften dann jedoch nicht zu sehen, ohne den Alias zu verwenden. Vor zwei Jahren ging es schnell voran.Ich bin damit einverstanden, dass Batarang das Beste ist, nachdem es
$scope
ein Objekt ausgewählt hat (es ist dasselbeangular.element($0).scope()
oder sogar kürzer mit jQuery:$($0).scope()
(mein Favorit))Auch wenn Sie wie ich Ihren Hauptbereich für das
body
Element haben,$('body').scope()
funktioniert a einwandfrei.quelle
Um die anderen Antworten hinzuzufügen und zu verbessern, geben Sie in der Konsole ein
$($0)
, um das Element abzurufen. Wenn es sich um eine Angularjs-Anwendung handelt, wird standardmäßig eine jQuery Lite-Version geladen.Wenn Sie jQuery nicht verwenden, können Sie angle.element ($ 0) wie folgt verwenden:
Führen Sie diesen Befehl in der Konsole aus, um zu überprüfen, ob Sie über jQuery und die Version verfügen:
Wenn Sie ein Element überprüft haben, ist das aktuell ausgewählte Element über die Befehlszeilen-API-Referenz $ 0 verfügbar. Sowohl Firebug als auch Chrome haben diese Referenz.
Die Chrome-Entwicklertools stellen jedoch die letzten fünf Elemente (oder Heap-Objekte) zur Verfügung, die über die Eigenschaften $ 0, $ 1, $ 2, $ 3, $ 4 unter Verwendung dieser Referenzen ausgewählt wurden. Das zuletzt ausgewählte Element oder Objekt kann als $ 0, das zweitletzte als $ 1 usw. bezeichnet werden.
Hier ist die Befehlszeilen-API-Referenz für Firebug , in der die Referenzen aufgeführt sind.
$($0).scope()
gibt den dem Element zugeordneten Bereich zurück. Sie können seine Eigenschaften sofort sehen.Einige andere Dinge, die Sie verwenden können, sind:
$($0).scope().$parent
.$($0).scope().$parent.$parent
$($0).scope().$root
$($0).isolateScope()
Weitere Details und Beispiele finden Sie unter Tipps und Tricks zum Debuggen von nicht bekanntem Angularjs-Code .
quelle
Untersuchen Sie das Element und verwenden Sie es in der Konsole
quelle
Einfach
$scope
als globale Variable zuweisen . Problem gelöst.Wir brauchen tatsächlich
$scope
öfter in der Entwicklung als in der Produktion.Bereits von @JasonGoemaat erwähnt, aber als geeignete Antwort auf diese Frage hinzugefügt.
quelle
Ich habe
angular.element($(".ng-scope")).scope();
in der Vergangenheit verwendet und es funktioniert großartig. Nur gut, wenn Sie nur einen App-Bereich auf der Seite haben oder Folgendes tun können:angular.element($("div[ng-controller=controllerName]")).scope();
oderangular.element(document.getElementsByClassName("ng-scope")).scope();
quelle
Normalerweise verwende ich dafür die Funktion jQuery data ():
Das Element $ 0 ist derzeit im Chrome DOM Inspector als Element ausgewählt. $ 1, $ 2 .. usw. sind zuvor ausgewählte Elemente.
quelle
Angenommen, Sie möchten auf den Bereich des Elements wie zugreifen
In der Konsole können Sie Folgendes verwenden:
Dies gibt Ihnen den Umfang für dieses Element.
quelle
An der Chrome-Konsole:
Beispiel
Chrome-Konsole
quelle
Dies erfordert die Installation von jQuery, funktioniert jedoch perfekt für eine Entwicklungsumgebung. Es durchsucht jedes Element, um die Instanzen der Bereiche abzurufen, und gibt sie dann mit den Controller-Namen zurück. Das Entfernen von Eigenschaften beginnt ebenfalls mit einem $, das anglejs im Allgemeinen für seine Konfiguration verwendet.
quelle
im Winkel erhalten wir jquery element durch angle.element () .... lässt c ...
Beispiel:
<div id=""></div>
quelle
Nur zum Debuggen habe ich dies an den Start des Controllers gesetzt.
Und so benutze ich es.
Löschen Sie es dann, wenn ich mit dem Debuggen fertig bin.
quelle
Setzen Sie einen Haltepunkt in Ihren Code an einer Stelle in der Nähe eines Verweises auf die Variable $ scope (sodass sich der Bereich $ im aktuellen Bereich 'normales altes JavaScript' befindet). Anschließend können Sie den Wert für $ scope in der Konsole überprüfen.
quelle
Definieren Sie einfach eine JavaScript-Variable außerhalb des Bereichs und weisen Sie sie Ihrem Bereich in Ihrem Controller zu:
Das ist es! Es sollte in allen Browsern funktionieren (zumindest in Chrome und Mozilla getestet).
Es funktioniert und ich benutze diese Methode.
quelle