Comenzaré diciendo que estoy aprendiendo sobre AngularJS, y que estaba leyendo este artículo, que parece abogar por JavaScript molesto como lo correcto:
http://www.ng-newsletter.com/posts/angular-for-the-jquery-developer.html
Según tengo entendido, JavaScript discreto generalmente se considera "lo correcto" (lo cual es discutible, pero está fuera del alcance de mi pregunta). Pero me preguntaba si hay una característica particular de AngularJS que requiere que los enlaces de eventos se especifiquen mediante atributos como ng-click
? ¿Hay alguna manera de usar AngularJS y NO usar enlaces de eventos en línea?
Como referencia: JavaScript intrusivo generalmente se refiere a tener sus vínculos de JavaScript en el propio HTML. JavaScript discreto se refiere al uso de JavaScript u otros medios para aplicar comportamientos de código mediante programación al DOM en lugar del marcado de texto sin formato que tiene referencias a JavaScript.
fuente
Respuestas:
Si.
Así es como funciona angular.
En tiempos antiguos (justo después de que todos los dinosaurios se extinguieran y un poco antes de que los relojes inteligentes se convirtieran en The Next Big Thing), el JavaScript discreto se consideraba The Right Thing. JavaScript discreto saldría con su prima, Mejora progresiva, y los dos fueron anunciados como la luz del mundo y el faro de la bondad.
Habia una razón para eso. Muchos usuarios usaban navegadores con motores de JavaScript deficientes o quizás sin motores de JavaScript. O tenían JavaScript deshabilitado. Nos dijeron que la web era principalmente para la transferencia de hipertexto, y no deberíamos hacer que nuestros sitios web sean inutilizables para algunos forzando JavaScript sobre ellos.
Del mismo modo, tenía sentido mantener JavaScript fuera del HTML. Se pensó que el HTML debería mantenerse puro, porque JavaScript era algo que agregaste después, si el usuario lo permitía. Si no, al menos el marcado HTML refleja la semántica de lo que estaba tratando de transmitir.
Esa no es la filosofía de AngularJS o las pautas de desarrollo web más modernas porque las cosas han cambiado. Cuando usamos AngularJS o marcos similares, estamos usando la web para entregar aplicaciones , no solo texto e imágenes. Las aplicaciones web son inútiles sin JavaScript, y no tiene sentido fingir lo contrario. Así que nos hemos librado de los grilletes de la Mejora progresiva porque (a) podemos confiar de manera segura en que todos nuestros usuarios tengan habilitado JavaScript y (b) simplemente nos ralentiza.
Una vez que no estamos haciendo Mejora progresiva, ¿por qué usar JavaScript discreto? La separación de preocupaciones es un concepto maravilloso. Pero son seis de una o media docena de otras: o tienes HTML plagado de referencias a JavaScript o tienes JavaScript plagado de referencias a HTML (la forma jQuery).
Si usa AngularJS, muy pronto verá una separación más clara de las preocupaciones en su código de lo que ha visto en otros estilos de desarrollo web. Claro, hay referencias a funciones JS en su HTML. Pero puede moverse fácilmente por HTML sin preocuparse por romper el código, y su JS es limpio, comprobable y no depende de un DOM muy específico. Esto le permite reutilizar mejor la lógica de negocios Y reutilizar mejor HTML.
En pocas palabras: no te preocupes por eso. Te acostumbrarás lo suficientemente rápido. Y no te resistas a las cosas solo porque siempre te dijeron que la otra forma es La Forma Correcta.
Adición Si usted siente que es importante para el código HTML para que sea compatible con el estándar, se puede utilizar el
data-
prefijo en sus directivas angulares: es decir,data-ng-click=
edata-ng-repeat=
y su HTML será compatible con W3C. Personalmente nunca me preocupo por eso, pero hacerlo es inofensivo.fuente