working not angularjs angularjs-ng-click

angularjs - not - ng-click function



angularjs ng-click come silenciosamente errores (1)

Si tengo un ng-click como este: ng-click = "buggy ()" y haga clic en no se generará ningún mensaje de error en la consola.

Esto hace que sea un poco difícil de depurar.

¿Por qué no se generan mensajes de error? ¿Algo que pueda hacer?


Expresiones angulares

En realidad, no es algo especial con ng-click , es el comportamiento predeterminado de las expresiones angulares .

buggy() no se evalúa con javascript regular. Se evalúa con $parse .

$parse evalúa expresiones y devuelve una función que se ejecutaría en un ámbito.

$parse solo registra errores cuando la expresión no es válida.

La evaluación de la expresión angular es perdonadora, no se me ocurre ninguna forma de pasarla.

¿Por qué las expresiones son perdonadoras?

Una razón para que las expresiones angulares sean indulgentes con lo no definido y nulo tiene que ver con el enlace de datos. Las variables enlazadas pueden inicialmente no estar definidas o ser nulas cuando se compilan en el DOM; un ejemplo realmente claro es cuando la variable enlazada depende de una promesa. El equipo de Angular decidió que, en lugar de que aparecieran mensajes de error hasta que se resuelva esa promesa, sería mejor continuar en silencio.

De la guía angular a las expresiones :

Tiene más sentido no mostrar nada que lanzar una excepción si a no está definido (tal vez estamos esperando la respuesta del servidor, y pronto se definirá). Si no se perdonara la evaluación de expresiones, tendríamos que escribir enlaces que saturen el código, por ejemplo: {{((a || {}). B || {}). C}}

Consulte también: https://groups.google.com/forum/m/#!topic/angular/HRVOUKEHLFw

Expresiones angulares :

Las expresiones son fragmentos de código similares a JavaScript que generalmente se colocan en enlaces como {{expresión}}. Las expresiones son procesadas por el servicio $ parse . Las expresiones a menudo se procesan posteriormente utilizando filtros para crear un formato más fácil de usar.

Expresiones angulares vs. Expresiones de JS

Puede ser tentador pensar en las expresiones de vista angular como expresiones de JavaScript, pero eso no es del todo correcto, ya que Angular no usa una evaluación de JavaScript () para evaluar expresiones. Puede pensar en las expresiones angulares como expresiones de JavaScript con las siguientes diferencias:

  • Evaluación de atributos : la evaluación de todas las propiedades está en contra del alcance que realiza la evaluación, a diferencia de JavaScript donde las expresiones se evalúan en la ventana global.

  • Perdonar : la evaluación de expresiones es perdonar a indefinido y nulo, a diferencia de JavaScript, donde tratar de evaluar propiedades no definidas puede generar ReferenceError o TypeError.

  • No hay declaraciones de flujo de control : no puede hacer nada de lo siguiente en expresiones angulares: condicionales, bucles o lanzamientos.