uh angularjs envuelve una gran cantidad de su código de plantilla y lo ejecuta dinámicamente ... la fuente del error es siempre "angular.js", por lo que encontrar la fuente de un error es casi imposible.
user3338098
Respuestas:
64
1. Chrome
Para Debug AngularJS en Chrome , puede usar AngularJS Batarang . (Según las revisiones recientes del complemento, parece que AngularJS Batarang ya no se mantiene. Probado en varias versiones de Chrome no funciona)
Aquí está el enlace para la descripción y la demostración:
lástima que realmente no funcione. Ojalá el chico comenzara a mantener la cosa porque es una gran idea y tiene mucho potencial
Tules
5
@AskQuestion Parece que Batarang ya no es compatible. Esta respuesta debería eliminarse
Aakil Fernandes
El equipo de Angular (principalmente @btford) todavía es compatible con Batarang, pero no parece ser una prioridad en su lista, ya que todos están a la cabeza en la próxima versión de AngularJS 2.0. Mire ng-inspectsi Batarang le está dando dolores de cabeza.
demisx
asumiendo que batarang está funcionando correctamente, no se agrega contexto adicional a los errores de angular.js en la consola y la pestaña 'AngularJS' tampoco ayuda.
user3338098
1
@SazzadTusharKhan: de acuerdo. Pruebe esto -> en la versión mac tiene un menú de desarrollador ("Desarrollar"), en mac este menú se muestra a través de las preferencias> avanzado> mostrar menú de desarrollo, y allí puede ver elementos como "Empezar a depurar javascript". Para su referencia: youtube.com/watch?v=BUvsnDhFL2w
Vaibhav Jain
35
En mi humilde opinión, la experiencia más frustrante proviene de obtener / establecer un valor de un alcance específico relacionado con un elemento visual. Hice muchos puntos de interrupción no solo en mi propio código, sino también en angular.js, pero a veces simplemente no es la forma más efectiva. Aunque los métodos a continuación son muy poderosos, definitivamente se consideran una mala práctica si realmente los usa en el código de producción, ¡así que úselos sabiamente!
Obtener una referencia en la consola de un elemento visual
En muchos navegadores que no son IE, puede seleccionar un elemento haciendo clic con el botón derecho en un elemento y haciendo clic en "Inspeccionar elemento". Alternativamente, también puede hacer clic en cualquier elemento en la pestaña Elementos en Chrome, por ejemplo. El último elemento seleccionado se almacenará en variable$0 en la consola.
Obtener un alcance vinculado a un elemento
Dependiendo de si existe una directiva que crea un alcance aislado, puede recuperar el alcance mediante angular.element($0).scope()o angular.element($0).isolateScope()(usar $($0).scope()si $ está habilitado). Esto es exactamente lo que obtiene cuando usa la última versión de Batarang. Si está cambiando el valor directamente, recuerde usarscope.$digest() para reflejar los cambios en la IU.
$ eval es malvado
No necesariamente para depurar. scope.$eval(expression)es muy útil cuando desea comprobar rápidamente si una expresión tiene el valor esperado.
Los miembros prototipo que faltan del alcance
La diferencia entre scope.blay scope.$eval('bla')es que el primero no considera los valores heredados prototípicamente. Use el fragmento de abajo para obtener la imagen completa (no puede cambiar directamente el valor, pero puede usarlo de $evaltodos modos).
scopeCopy =function(scope){var a ={};for(x in scope){if(scope.hasOwnProperty(x)&&
x.substring(0,1)!=='$'&&
x !=='this'){
a[x]= angular.copy(scope[x])}}return a
};
scopeEval =function(scope){if(scope.$parent ===null){return hoho(scope)}else{return angular.extend({}, haha(scope.$parent), hoho(scope))}};
Úselo con scopeEval($($0).scope()) .
¿Dónde está mi controlador?
A veces, es posible que desee controlar los valores ngModelcuando escribe una directiva. Uso $($0).controller('ngModel')y se llega a comprobar el $formatters, $parsers, $modelValue, $viewValue$rendery todo.
No encuentro que AngularJS Batarang sea útil, aunque ng-inspector parece funcionar bien.
Martin Vseticka
7
Pruebe ng-inspector. Descargue el complemento para Firefox desde el sitio web http://ng-inspector.org/ . No está disponible en el menú de complementos de Firefox.
Desafortunadamente, la mayoría de los complementos y extensiones de navegador solo le muestran los valores, pero no le permiten editar variables de alcance o ejecutar funciones angulares. Si desea cambiar las variables $ scope en la consola del navegador (en todos los navegadores), puede usar jquery. Si carga jQuery antes de AngularJS, a angular.element se le puede pasar un selector de jQuery. Entonces podría inspeccionar el alcance de un controlador con
angular.element('[ng-controller="name of your controller"]').scope()
Ejemplo:
debe cambiar el valor de la variable $ scope y ver el resultado en el navegador y luego escribir en la consola del navegador:
Puede ver los cambios en su navegador de inmediato. La razón por la que usamos $ apply () es: cualquier variable de alcance actualizada desde fuera del contexto angular no la actualizará vinculante, debe ejecutar el ciclo de resumen después de actualizar los valores del alcance usando scope.$apply().
Para observar un valor de variable $ scope, solo necesita llamar a esa variable.
Ejemplo:
desea ver el valor de $ scope.var1 en la consola web en Chrome o Firefox, simplemente escriba:
Esto realmente no parece funcionar dentro de los componentes por alguna razón. La consola parece ubicar el punto de interrupción en el punto en el que se crea el componente, pero no muestra el código que se está ejecutando. Al menos no para mi. aunque puede ver el valor de las variables que son alcance. Si alguien sabe cómo hacer que el depurador muestre el código real que se está siguiendo, se agradecería un consejo.
user1023110
3
var rootEle = document.querySelector("html");var ele = angular.element(rootEle);
scope ()
Podemos obtener el $ scope del elemento (o su padre) usando el método scope () en el elemento:
var scope = ele.scope();
inyector()
var injector = ele.injector();
Con este inyector, podemos crear una instancia de cualquier objeto Angular dentro de nuestra aplicación, como servicios, otros controladores o cualquier otro objeto.
Para Visual Studio Code (no Visual Studio), haga Ctrl+ Shift+P
Escriba Debugger for Chrome en la barra de búsqueda, instálelo y habilítelo.
En su launch.jsonarchivo, agregue esta configuración:
{"version":"0.1.0","configurations":[{"name":"Launch localhost with sourcemaps","type":"chrome","request":"launch","url":"http://localhost/mypage.html","webRoot":"${workspaceRoot}/app/files","sourceMaps":true},{"name":"Launch index.html (without sourcemaps)","type":"chrome","request":"launch","file":"${workspaceRoot}/index.html"},]}
Debe iniciar Chrome con la depuración remota habilitada para que la extensión se adjunte a él.
Ventanas
Haga clic con el botón derecho en el acceso directo de Chrome y seleccione propiedades. En el campo "objetivo", agregue --remote-debugging-port = 9222 O en un símbolo del sistema, ejecute /chrome.exe --remote-debugging-port = 9222
OS X
En una terminal, ejecute / Applications / Google \ Chrome.app/Contents/MacOS/Google \ Chrome --remote-debugging-port = 9222
Linux
En una terminal, inicie google-chrome --remote-debugging-port = 9222
Dado que los complementos ya no funcionan, el conjunto de herramientas más útil que he encontrado es el uso de Visual Studio / IE porque puede establecer puntos de interrupción en su JS e inspeccionar sus datos de esa manera. Por supuesto, Chrome y Firefox tienen herramientas de desarrollo mucho mejores en general. Además, ¡el buen viejo console.log () ha sido muy útil!
Respuestas:
1. Chrome
Para Debug AngularJS en Chrome , puede usar AngularJS Batarang . (Según las revisiones recientes del complemento, parece que AngularJS Batarang ya no se mantiene. Probado en varias versiones de Chrome no funciona)
Aquí está el enlace para la descripción y la demostración:
Introducción de Angular JS Batarang
Descargue el complemento de Chrome desde aquí: complemento de Chrome para depurar AngularJS
También puede consultar este enlace: ng-book: Debugging AngularJS
También puede usar ng-inspect para depurar angular.
2. Firefox
Para Firefox, con la ayuda de Firebug , puede depurar el código.
También use estos complementos de Firefox : AngScope: complementos para Firefox (extensión no oficial del equipo de AngularJS)
3. Depurando AngularJS : Verifique el enlace: Depurando AngularJS
fuente
ng-inspect
si Batarang le está dando dolores de cabeza.En mi humilde opinión, la experiencia más frustrante proviene de obtener / establecer un valor de un alcance específico relacionado con un elemento visual. Hice muchos puntos de interrupción no solo en mi propio código, sino también en angular.js, pero a veces simplemente no es la forma más efectiva. Aunque los métodos a continuación son muy poderosos, definitivamente se consideran una mala práctica si realmente los usa en el código de producción, ¡así que úselos sabiamente!
Obtener una referencia en la consola de un elemento visual
En muchos navegadores que no son IE, puede seleccionar un elemento haciendo clic con el botón derecho en un elemento y haciendo clic en "Inspeccionar elemento". Alternativamente, también puede hacer clic en cualquier elemento en la pestaña Elementos en Chrome, por ejemplo. El último elemento seleccionado se almacenará en variable
$0
en la consola.Obtener un alcance vinculado a un elemento
Dependiendo de si existe una directiva que crea un alcance aislado, puede recuperar el alcance mediante
angular.element($0).scope()
oangular.element($0).isolateScope()
(usar$($0).scope()
si $ está habilitado). Esto es exactamente lo que obtiene cuando usa la última versión de Batarang. Si está cambiando el valor directamente, recuerde usarscope.$digest()
para reflejar los cambios en la IU.$ eval es malvado
No necesariamente para depurar.
scope.$eval(expression)
es muy útil cuando desea comprobar rápidamente si una expresión tiene el valor esperado.Los miembros prototipo que faltan del alcance
La diferencia entre
scope.bla
yscope.$eval('bla')
es que el primero no considera los valores heredados prototípicamente. Use el fragmento de abajo para obtener la imagen completa (no puede cambiar directamente el valor, pero puede usarlo de$eval
todos modos).Úselo con
scopeEval($($0).scope())
.¿Dónde está mi controlador?
A veces, es posible que desee controlar los valores
ngModel
cuando escribe una directiva. Uso$($0).controller('ngModel')
y se llega a comprobar el$formatters
,$parsers
,$modelValue
,$viewValue
$render
y todo.fuente
¡También hay $ log que puedes usar! hace uso de su consola de la manera que usted quiere que funcione.
mostrando el error / advertencia / información de la forma en que su consola lo muestra normalmente.
usa esto> Documento
fuente
A pesar de que la pregunta está respondida, podría ser interesante echar un vistazo a ng-inspector
fuente
Pruebe ng-inspector. Descargue el complemento para Firefox desde el sitio web http://ng-inspector.org/ . No está disponible en el menú de complementos de Firefox.
http://ng-inspector.org/ - sitio web
http://ng-inspector.org/ng-inspector.xpi - Complemento de Firefox
fuente
Desafortunadamente, la mayoría de los complementos y extensiones de navegador solo le muestran los valores, pero no le permiten editar variables de alcance o ejecutar funciones angulares. Si desea cambiar las variables $ scope en la consola del navegador (en todos los navegadores), puede usar jquery. Si carga jQuery antes de AngularJS, a angular.element se le puede pasar un selector de jQuery. Entonces podría inspeccionar el alcance de un controlador con
Ejemplo: debe cambiar el valor de la variable $ scope y ver el resultado en el navegador y luego escribir en la consola del navegador:
Puede ver los cambios en su navegador de inmediato. La razón por la que usamos $ apply () es: cualquier variable de alcance actualizada desde fuera del contexto angular no la actualizará vinculante, debe ejecutar el ciclo de resumen después de actualizar los valores del alcance usando
scope.$apply()
.Para observar un valor de variable $ scope, solo necesita llamar a esa variable.
Ejemplo: desea ver el valor de $ scope.var1 en la consola web en Chrome o Firefox, simplemente escriba:
El resultado se mostrará en la consola de inmediato.
fuente
Agregue la llamada a
debugger
donde desea usarla.En la
console
pestaña de las herramientas de desarrollo web de su navegador, emitaangular.reloadWithDebugInfo();
Visite o vuelva a cargar la página que desea depurar y vea aparecer el depurador en su navegador.
fuente
scope () Podemos obtener el $ scope del elemento (o su padre) usando el método scope () en el elemento:
inyector()
Con este inyector, podemos crear una instancia de cualquier objeto Angular dentro de nuestra aplicación, como servicios, otros controladores o cualquier otro objeto.
fuente
Puede agregar 'depurador' en su código y volver a cargar la aplicación, lo que coloca el punto de interrupción allí y puede 'pasar' o ejecutar.
fuente
Puede depurar utilizando navegadores integrados en herramientas de desarrollo.
abra las herramientas de desarrollo en el navegador y vaya a la pestaña de fuentes.
abra el archivo que desea depurar usando Ctrl + P y busque el nombre del archivo
agregue un punto de ruptura en una línea y haga clic en el lado izquierdo del código.
recarga la página.
Hay una gran cantidad de complementos disponibles para la depuración que puede consultar para usar el complemento de Chrome Debug Angular Application usando el complemento "Debugger for chrome"
fuente
Para Visual Studio Code (no Visual Studio), haga Ctrl+ Shift+P
Escriba Debugger for Chrome en la barra de búsqueda, instálelo y habilítelo.
En su
launch.json
archivo, agregue esta configuración:Debe iniciar Chrome con la depuración remota habilitada para que la extensión se adjunte a él.
Haga clic con el botón derecho en el acceso directo de Chrome y seleccione propiedades. En el campo "objetivo", agregue --remote-debugging-port = 9222 O en un símbolo del sistema, ejecute /chrome.exe --remote-debugging-port = 9222
En una terminal, ejecute / Applications / Google \ Chrome.app/Contents/MacOS/Google \ Chrome --remote-debugging-port = 9222
En una terminal, inicie google-chrome --remote-debugging-port = 9222
Buscar más ===>
fuente
Dado que los complementos ya no funcionan, el conjunto de herramientas más útil que he encontrado es el uso de Visual Studio / IE porque puede establecer puntos de interrupción en su JS e inspeccionar sus datos de esa manera. Por supuesto, Chrome y Firefox tienen herramientas de desarrollo mucho mejores en general. Además, ¡el buen viejo console.log () ha sido muy útil!
fuente
Tal vez pueda usar Angular Augury, una extensión de Google Chrome Dev Tools para depurar aplicaciones de Angular 2 y superiores.
fuente