Me gustaría acceder a mi $scope
variable en la consola de JavaScript de Chrome. ¿Cómo puedo hacer eso?
No puedo ver $scope
ni el nombre de mi módulo myapp
en la consola como variables.
angularjs
angularjs-scope
murtaza52
fuente
fuente
window.MY_SCOPE = $scope;
primero en mi función de controlador.$scope
objetos de elementos DOM seleccionados en el Inspector DOM de Firebug.Respuestas:
Elija un elemento en el panel HTML de las herramientas de desarrollador y escriba esto en la consola:
En WebKit y Firefox,
$0
es una referencia al nodo DOM seleccionado en la pestaña de elementos, por lo que al hacer esto se imprime el alcance del nodo DOM seleccionado en la consola.También puede orientar el alcance por ID de elemento, así:
Complementos / Extensiones
Hay algunas extensiones de Chrome muy útiles que quizás quieras consultar:
Batarang . Esto ha existido por un tiempo.
ng-inspector . Este es el más nuevo y, como su nombre lo indica, le permite inspeccionar los ámbitos de su aplicación.
Jugando con jsFiddle
Al trabajar con jsfiddle, puede abrir el violín en modo show agregando
/show
al final de la URL. Cuando se ejecuta así, tiene acceso a laangular
global. Puedes probarlo aquí:http://jsfiddle.net/jaimem/Yatbt/show
jQuery Lite
Si carga jQuery antes de AngularJS,
angular.element
se le puede pasar un selector jQuery. Para que pueda inspeccionar el alcance de un controlador conDe un botón
... y así.
Es posible que desee utilizar una función global para que sea más fácil:
Ahora puedes hacer esto
Verifique aquí: http://jsfiddle.net/jaimem/DvRaR/1/show/
fuente
angular.element($0).scope()
, funciona hasta que intente llamar a algunos métodos. Lo intenté y, por alguna razón, ¿no son posibles las solicitudes HTTP en esta configuración?Para mejorar la respuesta de jm ...
O si está utilizando jQuery, esto hace lo mismo ...
Otra forma fácil de acceder a un elemento DOM desde la consola (como se menciona jm) es hacer clic en él en la pestaña 'elementos', y se almacena automáticamente como
$0
.fuente
angular.element(document.body).scope()
, gracias!Si ha instalado Batarang
Entonces puedes escribir:
cuando tiene el elemento seleccionado en la vista de elementos en Chrome. Ref: https://github.com/angular/angularjs-batarang#console
fuente
Esta es una forma de llegar al alcance sin Batarang, puede hacer:
O si desea encontrar su alcance por nombre de controlador, haga esto:
Después de realizar cambios en su modelo, deberá aplicar los cambios al DOM llamando a:
fuente
angular.element
ya es un método de selección de elementos. ¡Deja de decir que necesitas jQuery para tareas simples como seleccionar un elemento por su id!angular.element
ya hace lo que estás usando para jQuery. De hecho, si jQuery está disponibleangular.element
es un alias para jQuery. Estás innecesariamente complicando tu código.angular.element('#selectorId')
yangular.element('[ng-controller=myController]')
hacer lo mismo, solo que con menos código. Es lo mismo que llamarangular.element('#selectorId'.toString())
En algún lugar de su controlador (a menudo, la última línea es un buen lugar), coloque
Si desea ver un alcance interno / implícito, digamos dentro de una repetición ng, algo como esto funcionará.
Luego en tu controlador
Tenga en cuenta que anteriormente definimos la función showScope () en el ámbito principal, pero está bien ... el ámbito secundario / interno / implícito puede acceder a esa función, que luego imprime el ámbito en función del evento y, por lo tanto, el ámbito asociado con El elemento que disparó el evento.
La sugerencia de @ jm- también funciona,
pero no creo que funcione dentro de un jsFiddle. Me sale este error en jsFiddle dentro de Chrome:fuente
Una advertencia para muchas de estas respuestas: si alias tu controlador, tus objetos de alcance estarán en un objeto dentro del objeto devuelto desde
scope()
.Por ejemplo, si su directiva de controlador se crea así:
<div ng-controller="FormController as frm">
para acceder a unastartDate
propiedad de su controlador, debería llamarangular.element($0).scope().frm.startDate
fuente
$scope
, nombrada$ctrl
de manera predeterminada, independientemente de si se cambia el nombre usandocontrollerAs
o no. No entiendo dónde viste una "advertencia" en las respuestas existentes. Tenga en cuenta que la mayoría de las respuestas aquí se proporcionaron cuandocontrollerAs
no era una práctica común.controllerAs
no era una práctica común, por lo que era confuso para los novatos que podrían haber estado siguiendo un "libro de cocina" que les decía alias al controlador, pero luego no ver las propiedades sin usar el alias. Las cosas se movían rápido hace dos años.Estoy de acuerdo en que lo mejor es Batarang con él
$scope
después de seleccionar un objeto (es lo mismoangular.element($0).scope()
o incluso más corto con jQuery:$($0).scope()
(mi favorito))Además, si como yo tiene su alcance principal en el
body
elemento, a$('body').scope()
funciona bien.fuente
Para agregar y mejorar las otras respuestas, en la consola, ingrese
$($0)
para obtener el elemento. Si se trata de una aplicación Angularjs, se carga una versión jQuery lite de forma predeterminada.Si no está usando jQuery, puede usar angular.element ($ 0) como en:
Para verificar si tiene jQuery y la versión, ejecute este comando en la consola:
Si ha inspeccionado un elemento, el elemento seleccionado actualmente está disponible a través de la referencia de API de línea de comando $ 0. Tanto Firebug como Chrome tienen esta referencia.
Sin embargo, las herramientas de desarrollador de Chrome pondrán a disposición los últimos cinco elementos (u objetos de almacenamiento dinámico) seleccionados a través de las propiedades denominadas $ 0, $ 1, $ 2, $ 3, $ 4 utilizando estas referencias. El elemento u objeto seleccionado más recientemente puede ser referenciado como $ 0, el segundo más reciente como $ 1 y así sucesivamente.
Aquí está la referencia de la API de línea de comandos para Firebug que enumera sus referencias.
$($0).scope()
devolverá el alcance asociado con el elemento. Puede ver sus propiedades de inmediato.Algunas otras cosas que puede usar son:
$($0).scope().$parent
.$($0).scope().$parent.$parent
$($0).scope().$root
$($0).isolateScope()
Consulte Consejos y trucos para depurar código Angularjs desconocido para obtener más detalles y ejemplos.
fuente
Inspeccione el elemento, luego use esto en la consola
fuente
Simplemente asigne
$scope
como una variable global. Problema resuelto.De hecho, necesitamos
$scope
más a menudo en desarrollo que en producción.Ya lo mencionó @JasonGoemaat pero lo agregó como una respuesta adecuada a esta pregunta.
fuente
Lo he usado
angular.element($(".ng-scope")).scope();
en el pasado y funciona muy bien. Solo es bueno si solo tiene un alcance de aplicación en la página, o puede hacer algo como:angular.element($("div[ng-controller=controllerName]")).scope();
oangular.element(document.getElementsByClassName("ng-scope")).scope();
fuente
Por lo general, uso la función jQuery data () para eso:
El elemento $ 0 actualmente está seleccionado en el inspector DOM de Chrome. $ 1, $ 2 ... y así sucesivamente son elementos previamente seleccionados.
fuente
Digamos que desea acceder al alcance del elemento como
Puede usar lo siguiente en la consola:
Esto le dará el alcance en ese elemento.
fuente
En la consola de Chrome:
Ejemplo
Consola de Chrome
fuente
Esto requiere que jQuery también esté instalado, pero funciona perfectamente para un entorno de desarrollo. Mira a través de cada elemento para obtener las instancias de los ámbitos y luego los devuelve etiquetados con los nombres de los controladores. También elimina cualquier propiedad que comience con $, que es lo que angularjs generalmente usa para su configuración.
fuente
en angular obtenemos el elemento jquery por angular.element () .... vamos a c ...
ejemplo:
<div id=""></div>
fuente
Solo para fines de depuración pongo esto al inicio del controlador.
Y así es como lo uso.
luego elimínelo cuando haya terminado de depurar.
fuente
Coloque un punto de interrupción en su código en algún lugar cercano a una referencia a la variable $ scope (para que el $ scope esté en el alcance actual de 'JavaScript antiguo simple'). Luego puede inspeccionar el valor de $ scope en la consola.
fuente
Simplemente defina una variable de JavaScript fuera del alcance y asígnela a su alcance en su controlador:
¡Eso es! Debería funcionar en todos los navegadores (probado al menos en Chrome y Mozilla).
Está funcionando y estoy usando este método.
fuente