¿Se requiere JavaScript molesto para admitir una función de AngularJS?


9

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.


Reformulé la pregunta para que estuviera menos basada en la opinión.
Kevin

44
en realidad esto ya está respondido: stackoverflow.com/questions/20906804/…
Kevin

Respuestas:


6

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=e data-ng-repeat=y su HTML será compatible con W3C. Personalmente nunca me preocupo por eso, pero hacerlo es inofensivo.


3
Buena explicación, pero desconfío de su afirmación "no hacer mejora progresiva". La mejora progresiva es mucho más que recurrir a noJS. Proporciona imágenes de retina y SVG con retrocesos para aquellos sin dispositivos de retina. Está agregando animaciones sutiles a los navegadores que los admiten. Reduce la calidad de transmisión de video en dispositivos de bajo ancho de banda (como lo hace YouTube). Es un diseño receptivo. Es posible que no necesite los retrocesos noJS para su aplicación web, pero no abandone la mejora progresiva.
bryanbraun

1
@bryanbraun tienes razón. Punto a favor.
Aaron Greenwald el

¿Cómo se hace discreto angular? Estamos listos para lanzar Angular y encontramos un serio defecto de diseño. Tenemos un equipo de diseño HTML de 50 personas y un equipo de desarrollo de dos personas. Los diseñadores cambian HTML sin agregar no html. Dos desarrolladores no pueden mantenerse al día con 50 diseñadores si tuviéramos que ajustar cada plantilla creada todos los días, incluso después de que se publiquen los sitios web. También parece una tontería compilar plantillas html completas en código JavaScript como Webpack cuando puede automatizar esa función en el servidor para recopilar, comprimir y almacenar en caché html por alcance de página en un archivo zip con la misma eficiencia de descarga del cliente.
Zachary Scott
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.