Chciałbym uzyskać dostęp do mojej $scope
zmiennej w konsoli JavaScript Chrome. Jak mogę to zrobić?
Nie widzę $scope
ani nazwy mojego modułu myapp
w konsoli jako zmiennych.
angularjs
angularjs-scope
murtaza52
źródło
źródło
window.MY_SCOPE = $scope;
pierwszą rzecz w funkcji kontrolera.$scope
obiekty wybranych elementów DOM w Inspektorze DOM Firebug.Odpowiedzi:
Wybierz element w panelu HTML narzędzi programistycznych i wpisz go w konsoli:
W WebKit i Firefox
$0
jest odniesieniem do wybranego węzła DOM na karcie elementów, więc w ten sposób otrzymujesz wybrany zakres węzła DOM wydrukowany w konsoli.Możesz także celować w zakres według identyfikatora elementu, na przykład:
Dodatki / rozszerzenia
Istnieje kilka bardzo przydatnych rozszerzeń Chrome, które możesz chcieć sprawdzić:
Batarang . To już od jakiegoś czasu.
inspektor ng . Jest to najnowszy i, jak sama nazwa wskazuje, umożliwia sprawdzenie zakresów aplikacji.
Gra z jsFiddle
Podczas pracy z jsfiddle możesz otworzyć skrzypce w trybie pokazu , dodając
/show
na końcu adresu URL. Podczas takiego działania masz dostęp doangular
globalnego. Możesz spróbować tutaj:http://jsfiddle.net/jaimem/Yatbt/show
jQuery Lite
Jeśli załadujesz jQuery przed AngularJS,
angular.element
możesz przekazać selektor jQuery. Abyś mógł sprawdzić zakres kontrolera za pomocąPrzycisku
... i tak dalej.
Możesz faktycznie użyć funkcji globalnej, aby ułatwić:
Teraz możesz to zrobić
Sprawdź tutaj: http://jsfiddle.net/jaimem/DvRaR/1/show/
źródło
angular.element($0).scope()
działa, dopóki nie spróbujesz wywołać niektórych metod. Próbowałem iz jakiegoś powodu żadne żądania HTTP nie są możliwe w tej konfiguracji?Aby poprawić odpowiedź JM ...
Lub jeśli używasz jQuery, robi to samo ...
Innym łatwym sposobem na uzyskanie dostępu do elementu DOM z konsoli (jak wspomniano w jm) jest kliknięcie go w zakładce „elementy” i automatycznie zostanie on zapisany jako
$0
.źródło
angular.element(document.body).scope()
, dziękuję!Jeśli masz zainstalowany Batarang
Następnie możesz po prostu napisać:
kiedy masz wybrany element w widoku elementów w chrome. Ref - https://github.com/angular/angularjs-batarang#console
źródło
Jest to sposób na uzyskanie zasięgu bez Bataranga, możesz:
Lub jeśli chcesz znaleźć zakres według nazwy kontrolera, wykonaj następujące czynności:
Po wprowadzeniu zmian w modelu należy zastosować zmiany w modelu DOM, wywołując:
źródło
angular.element
jest już metodą wyboru elementu. Przestań mówić, że potrzebujesz jQuery do prostych zadań, takich jak wybieranie elementu według jego identyfikatora!angular.element
już robi to, do czego używasz jQuery. W rzeczywistości, jeśli jQuery jest dostępny,angular.element
jest to alias dla jQuery. Niepotrzebnie komplikujesz swój kod.angular.element('#selectorId')
iangular.element('[ng-controller=myController]')
rób to samo, tylko z mniejszym kodem.angular.element('#selectorId'.toString())
Gdzieś w twoim kontrolerze (często ostatnia linia to dobre miejsce)
Jeśli chcesz zobaczyć zakres wewnętrzny / niejawny, powiedzmy w powtórzeniu ng, coś takiego będzie działać.
Następnie w kontrolerze
Zauważ, że powyżej definiujemy funkcję showScope () w zakresie nadrzędnym, ale to dobrze ... zakres potomny / wewnętrzny / niejawny może uzyskać dostęp do tej funkcji, która następnie drukuje zakres na podstawie zdarzenia, a zatem zakres związany z element, który uruchomił zdarzenie.
Sugestia @ jm-także działa,
ale nie sądzę, że działa w jsFiddle. Ten błąd pojawia się w jsFiddle w Chrome:źródło
Jedno zastrzeżenie do wielu z tych odpowiedzi: jeśli użyjesz aliasu kontrolera, twoje obiekty zakresu będą w obiekcie w zwróconym obiekcie z
scope()
.Na przykład, jeśli twoja dyrektywa kontrolera jest tworzona w taki sposób:
<div ng-controller="FormController as frm">
to aby uzyskać dostęp dostartDate
właściwości kontrolera, zadzwoniszangular.element($0).scope().frm.startDate
źródło
$scope
nazwie$ctrl
domyślnie niezależnie od tego, czy zmienisz jego nazwę za pomocącontrollerAs
czy nie. Nie rozumiem, gdzie widziałeś „zastrzeżenie” w istniejących odpowiedziach. Należy zauważyć, że większość odpowiedzi tutaj została udzielona, gdycontrollerAs
nie była to powszechna praktyka.controllerAs
nie było to powszechną praktyką, więc było mylące dla początkujących, którzy mogli śledzić „książkę kucharską”, która mówiła im, aby alias kontrolera, ale potem nie widzieli właściwości bez użycia aliasu. Dwa lata temu wszystko szło szybko.Zgadzam się, że najlepszy jest Batarang z nim
$scope
po wybraniu obiektu (jest taki samangular.element($0).scope()
lub nawet krótszy z jQuery:$($0).scope()
(mój ulubiony))Ponadto, jeśli tak jak ja, masz główny zakres na
body
elemencie,$('body').scope()
działa dobrze.źródło
Aby dodać i ulepszyć inne odpowiedzi, w konsoli wprowadź,
$($0)
aby uzyskać element. Jeśli jest to aplikacja Angularjs, domyślnie ładowana jest wersja jQuery lite.Jeśli nie używasz jQuery, możesz użyć angular.element (0 $) jak w:
Aby sprawdzić, czy masz jQuery i wersję, uruchom to polecenie w konsoli:
Jeśli sprawdziłeś element, aktualnie wybrany element jest dostępny za pośrednictwem interfejsu API w wierszu poleceń nr 0. Zarówno Firebug, jak i Chrome mają to odniesienie.
Jednak narzędzia programistyczne Chrome udostępnią pięć ostatnich elementów (lub obiektów sterty) wybranych za pomocą tych właściwości o nazwach 0, 1, 2, 3, 4 USD. Ostatnio wybrany element lub obiekt może być oznaczony jako 0 USD, drugi jako 1 USD i tak dalej.
Oto odniesienie interfejsu API wiersza polecenia dla Firebug, które zawiera listę odniesień.
$($0).scope()
zwróci zakres powiązany z elementem. Możesz zobaczyć jego właściwości od razu.Niektóre inne rzeczy, których możesz użyć to:
$($0).scope().$parent
.$($0).scope().$parent.$parent
$($0).scope().$root
$($0).isolateScope()
Zobacz Porady i wskazówki dotyczące debugowania nieznanego kodu Angularjs, aby uzyskać więcej szczegółów i przykładów.
źródło
Sprawdź element, a następnie użyj go w konsoli
źródło
Po prostu przypisz
$scope
jako zmienną globalną. Problem rozwiązany.W rzeczywistości potrzebujemy
$scope
częściej w fazie rozwoju niż w produkcji.Wspomniany już przez @JasonGoemaat, ale dodając go jako odpowiednią odpowiedź na to pytanie.
źródło
Używałem
angular.element($(".ng-scope")).scope();
w przeszłości i działa świetnie. Dobrze, jeśli masz tylko jeden zakres aplikacji na stronie lub możesz zrobić coś takiego:angular.element($("div[ng-controller=controllerName]")).scope();
lubangular.element(document.getElementsByClassName("ng-scope")).scope();
źródło
Zwykle używam do tego funkcji jQuery data ():
0 $ jest obecnie zaznaczonym przedmiotem w chrome inspektorze DOM. 1 USD, 2 USD .. i tak dalej to wcześniej wybrane elementy.
źródło
Powiedz, że chcesz uzyskać dostęp do zakresu elementu, np
W konsoli można użyć następujących opcji:
To da ci zakres w tym elemencie.
źródło
W konsoli Chrome:
Przykład
Konsola Chrome
źródło
Wymaga to również zainstalowania jQuery, ale działa idealnie w środowisku deweloperskim. Przegląda każdy element, aby uzyskać wystąpienia zakresów, a następnie zwraca je oznaczone tam nazwami kontrolerów. Usuwa także wszelkie właściwości zaczynające się od $, który jest zwykle używany przez angularjs do konfiguracji.
źródło
w angular otrzymujemy element jquery przez angular.element () .... pozwala c ...
przykład:
<div id=""></div>
źródło
Wyłącznie w celu debugowania umieszczam to na początku kontrolera.
I tak to wykorzystuję.
następnie usuń go po zakończeniu debugowania.
źródło
Umieść punkt przerwania w kodzie, gdzieś blisko odniesienia do zmiennej $ scope (tak, aby $ scope był w bieżącym zakresie „zwykłego starego JavaScript”). Następnie możesz sprawdzić wartość $ scope w konsoli.
źródło
Po prostu zdefiniuj zmienną JavaScript poza zakresem i przypisz ją do swojego zakresu w kontrolerze:
Otóż to! Powinien działać we wszystkich przeglądarkach (testowany przynajmniej w Chrome i Mozilli).
Działa i używam tej metody.
źródło