Я хотел бы получить доступ к моей $scope
переменной в консоли Chrome JavaScript. Как я могу это сделать?
Я не могу видеть $scope
ни имя моего модуля myapp
в консоли в качестве переменных.
angularjs
angularjs-scope
murtaza52
источник
источник
window.MY_SCOPE = $scope;
первое в своей функции контроллера.$scope
объекты выбранных элементов DOM в DOM-инспекторе Firebug.Ответы:
Выберите элемент на панели HTML инструментов разработчика и введите его в консоли:
В WebKit и Firefox
$0
это ссылка на выбранный узел DOM на вкладке элементов, поэтому, выполнив это, вы получите область выбранного узла DOM, распечатанную в консоли.Вы также можете нацелить область видимости по идентификатору элемента, например так:
Плагины / расширения
Есть несколько очень полезных расширений Chrome, которые вы можете попробовать:
Batarang . Это было вокруг некоторое время.
нг-инспектор . Это новейшая версия, и, как следует из названия, она позволяет вам осмотреть области своего приложения.
Играя с jsFiddle
При работе с jsfiddle вы можете открыть скрипку в режиме показа , добавив
/show
в конце URL. Когда вы работаете так, у вас есть доступ кangular
глобальному. Вы можете попробовать это здесь:http://jsfiddle.net/jaimem/Yatbt/show
JQuery Lite
Если вы загружаете jQuery до AngularJS,
angular.element
может быть передан селектор jQuery. Таким образом, вы можете проверить область действия контроллера сКнопки
... и так далее.
Возможно, вы захотите использовать глобальную функцию, чтобы упростить ее:
Теперь вы можете сделать это
Проверьте здесь: http://jsfiddle.net/jaimem/DvRaR/1/show/
источник
angular.element($0).scope()
момента, пока не попробуешь вызвать некоторые методы. Я пытался, и по какой-то причине никакие запросы HTTP невозможны в этой настройке?Чтобы улучшить ответ JM ...
Или, если вы используете JQuery, это делает то же самое ...
Другой простой способ получить доступ к элементу DOM из консоли (как упоминалось в jm) - щелкнуть по нему во вкладке «elements», и он автоматически сохранится как
$0
.источник
angular.element(document.body).scope()
, спасибо!Если вы установили Batarang
Тогда вы можете просто написать:
когда элемент выбран в представлении элементов в Chrome. Ссылка - https://github.com/angular/angularjs-batarang#console
источник
Это способ достичь цели без Batarang, вы можете сделать:
Или, если вы хотите найти свою область по имени контроллера, сделайте это:
После того, как вы внесете изменения в свою модель, вам нужно применить изменения к DOM, вызвав:
источник
angular.element
это уже метод выбора элемента. Перестаньте говорить, что вам нужен jQuery для простых задач, таких как выбор элемента по его идентификатору!angular.element
уже делает то, что вы используете для jQuery. Фактически, если jQuery доступенangular.element
, это псевдоним для jQuery. Вы без необходимости усложняете свой код.angular.element('#selectorId')
иangular.element('[ng-controller=myController]')
делать то же самое, только с меньшим количеством кода. Вы можете также позвонитьangular.element('#selectorId'.toString())
Где-то в вашем контроллере (часто последняя строка - хорошее место), поставьте
Если вы хотите увидеть внутреннюю / неявную область, скажем, внутри ng-repeat, что-то вроде этого будет работать.
Тогда в вашем контроллере
Обратите внимание, что выше мы определяем функцию showScope () в родительской области, но это нормально ... дочерняя / внутренняя / неявная область может получить доступ к этой функции, которая затем распечатывает область, основанную на событии, и, следовательно, область, связанную с элемент, который вызвал событие.
Предложение @ jm- также работает,
но я не думаю, что оно работает внутри jsFiddle. Я получаю эту ошибку на jsFiddle внутри Chrome:источник
Один из предостережений для многих из этих ответов: если вы используете псевдоним вашего контроллера, ваши объекты области видимости будут в объекте в возвращаемом объекте из
scope()
.Например, если ваша директива контроллера создана следующим образом:
<div ng-controller="FormController as frm">
для доступа кstartDate
свойству вашего контроллера вы должны вызватьangular.element($0).scope().frm.startDate
источник
$scope
, с именем$ctrl
по умолчанию, независимо от переименовывать ли с помощьюcontrollerAs
или нет. Я не понимаю, где вы видели «предостережение» в существующих ответах. Обратите внимание, что большинство ответов здесь были предоставлены тогда, когдаcontrollerAs
это не было обычной практикой.controllerAs
это не было обычной практикой, поэтому это было сбивающим с толку для новичков, которые, возможно, следовали «кулинарной книге», в которой указывалось псевдоним контроллера, но затем не видели свойства без использования псевдонима. Все шло быстро два года назад.Я согласен, что лучше всего Batarang
$scope
после выбора объекта (он такой жеangular.element($0).scope()
или даже короче с jQuery:$($0).scope()
(мой любимый))Кроме того, если, как и я, у вас есть основная сфера действия
body
элемента, то все$('body').scope()
отлично работает.источник
Чтобы добавить и улучшить другие ответы, в консоли введите
$($0)
чтобы получить элемент. Если это приложение Angularjs, по умолчанию загружается версия jQuery lite.Если вы не используете jQuery, вы можете использовать angular.element ($ 0), как в:
Чтобы проверить, есть ли у вас jQuery и версия, выполните эту команду в консоли:
Если вы проверили элемент, текущий выбранный элемент доступен через API-интерфейс командной строки $ 0. И Firebug, и Chrome имеют эту ссылку.
Однако инструменты разработчика Chrome сделают доступными последние пять элементов (или объектов кучи), выбранных через свойства с именами $ 0, $ 1, $ 2, $ 3, $ 4, используя эти ссылки. На последний выбранный элемент или объект можно ссылаться как на $ 0, второй на последний - на $ 1 и так далее.
Вот ссылка API командной строки для Firebug котором перечислены его ссылки.
$($0).scope()
вернет область, связанную с элементом. Вы можете увидеть его свойства сразу.Некоторые другие вещи, которые вы можете использовать:
$($0).scope().$parent
,$($0).scope().$parent.$parent
$($0).scope().$root
$($0).isolateScope()
См. Советы и рекомендации по отладке незнакомого кода Angularjs для получения дополнительной информации и примеров.
источник
Осмотрите элемент, затем используйте это в консоли
источник
Просто назначьте
$scope
в качестве глобальной переменной. Задача решена.Нам на самом деле нужно
$scope
чаще в разработке, чем в производстве.Упоминается уже @JasonGoemaat, но добавляет его как подходящий ответ на этот вопрос.
источник
Я использовал
angular.element($(".ng-scope")).scope();
в прошлом, и это прекрасно работает. Хорошо только если у вас есть только одна область приложения на странице, или вы можете сделать что-то вроде:angular.element($("div[ng-controller=controllerName]")).scope();
илиangular.element(document.getElementsByClassName("ng-scope")).scope();
источник
Я обычно использую функцию jQuery data () для этого:
В настоящее время выбранный элемент $ 0 в инспекторе Chrome DOM. $ 1, $ 2 .. и т. Д. Являются ранее выбранными элементами.
источник
Скажем, вы хотите получить доступ к области действия элемента, как
Вы можете использовать следующее в консоли:
Это даст вам область действия в этом элементе.
источник
На консоли Chrome:
пример
Консоль Chrome
источник
Это также требует установки jQuery, но отлично работает для среды разработки. Он просматривает каждый элемент, чтобы получить экземпляры областей, а затем возвращает их, помеченные именами контроллеров. Также удаляется любое свойство, начинающееся с $, которое angularjs обычно использует для своей конфигурации.
источник
в угловых мы получаем элемент jquery angular.element () .... позволяет с ...
пример:
<div id=""></div>
источник
Только для целей отладки я поместил это в начало контроллера.
И вот как я это использую.
затем удалите его, когда я закончу отладку.
источник
Поместите точку останова в своем коде где-то рядом со ссылкой на переменную $ scope (так, чтобы область действия $ находилась в текущей области видимости «старого старого JavaScript»). Затем вы можете проверить значение $ scope в консоли.
источник
Просто определите переменную JavaScript за пределами области и назначьте ее своей области в вашем контроллере:
Это оно! Должно работать во всех браузерах (проверено хотя бы в Chrome и Mozilla).
Это работает, и я использую этот метод.
источник