He pasado bastante tiempo leyendo la documentación de AngularJS y varios tutoriales, y me ha sorprendido bastante lo inaccesible de la documentación.
Tengo una pregunta simple y respondible que también puede ser útil para otras personas que buscan recoger AngularJS:
¿Qué es una directiva AngularJS?
Debería haber una definición simple y precisa de una directiva en alguna parte, pero el sitio web de AngularJS ofrece estas definiciones sorprendentemente inútiles:
Las directivas son una característica única y poderosa disponible en AngularJS. Las directivas le permiten inventar una nueva sintaxis HTML, específica para su aplicación.
En la documentación del desarrollador :
Las directivas son una forma de enseñar HTML nuevos trucos. Durante la compilación DOM, las directivas se comparan con el HTML y se ejecutan. Esto permite a las directivas registrar el comportamiento o transformar el DOM.
Y hay una serie de charlas sobre directivas que, irónicamente, parecen suponer que el público ya comprende lo que son.
¿Alguien podría ofrecer, para una referencia clara, una definición precisa de lo que es una directiva que explica:
- Qué es (vea la definición clara de jQuery como ejemplo)
- ¿Qué problemas y situaciones prácticas se pretende abordar?
- Qué patrón de diseño incorpora o, alternativamente, cómo encaja en la supuesta misión MVC / MVW de AngularJS.
fuente
Respuestas:
Una directiva es esencialmente una función † que se ejecuta cuando el compilador Angular lo encuentra en el DOM. Las funciones pueden hacer casi cualquier cosa, por eso creo que es bastante difícil definir qué es una directiva. Cada directiva tiene un nombre (como ng-repeat, tabs, make-your-own-own) y cada directiva determina dónde se puede usar: elemento, atributo, clase, en un comentario.
† Una directiva normalmente solo tiene una función de enlace (post). Una directiva complicada podría tener una función de compilación, una función de preenlace y una función de postenlace.
Lo más poderoso que pueden hacer las directivas es extender HTML. Sus extensiones son un lenguaje específico de dominio (DSL) para construir su aplicación. Por ejemplo, si su aplicación ejecuta un sitio de compras en línea, puede extender HTML para que tenga directivas de "carrito de compras", "cupón", "especiales", etc. "dominio" de compras en línea, en lugar de "div" y "span" (como ya se mencionó @WTK).
Las directivas también pueden componer HTML: agrupe un montón de HTML en algún componente reutilizable. Si te encuentras usando ng-include para extraer mucho HTML, probablemente sea hora de refactorizar las directivas.
Las directivas son donde manipula el DOM y captura los eventos DOM. Esta es la razón por la cual las funciones de compilación y enlace de la directiva reciben el "elemento" como argumento. Usted puede
En HTML tenemos cosas como
<a href="...">
,<img src="...">
,<br>
,<table><tr><th>
. ¿Cómo describirías qué son a, href, img, src, br, table, tr y th? Eso es una directiva.fuente
<!-- directive: my-directive exp -->
<div></div>
es una directiva? Dijiste que si. Pero aquí no hay decoración (a través de elemento, clase, comentario, atributo). La gente aquí dice que estos son marcadores para un DOM HTML . ¿Puedes aclarar? (No estoy hablando de la causa en la que puedes crear una directiva para un elemento simple como<div>
)Tal vez una definición realmente simple e inicial para directivas angulares sería
Algunos ejemplos de esto serían
Mira este tutorial, al menos para mí fue una de las mejores introducciones a Angular. Un enfoque más completo sería todo lo que @ mark-rajcok dijo antes.
fuente
Mirando la documentación, las directivas son estructuras que puedes escribir que angularjs analiza para crear objetos y comportamientos. En otras palabras, es una plantilla en la que usas una combinación de nodos arbitrarios y pseudo-javascript y marcadores de posición para datos para expresar intenciones de cómo su widget (componente) está estructurado, cómo se comporta y cómo se alimenta con datos. Angularjs luego se ejecuta contra esas directivas para traducirlas en código html / javascript en funcionamiento.
Las directivas están ahí para que pueda construir componentes más complejos (widgets) utilizando la semántica adecuada. Solo eche un vistazo al ejemplo de directivas angularjs: están definiendo el panel de pestañas (que, por supuesto, no es válido en HTML normal). Es más intuitivo de usar como div-s o tramos para crear una estructura que luego se labra para parecerse a un panel de la pestaña.
fuente
En las directivas de AngularJS hay marcadores html para un elemento HTML DOM como un atributo (restrict- A), nombre del elemento (restrict- E), comentario (restrict- M) o clase CSS (restrict - C) que le dicen al compilador HTML de AngularJS ($ compilar) para realizar un comportamiento específico a ese elemento DOM o incluso transformar el elemento DOM y sus elementos secundarios. Algunos ejemplos son ng-bind, ng-hide / show, etc.
fuente
La página de inicio es muy clara al respecto: cuando pasa el mouse sobre las pestañas en la última sección:
Luego en la siguiente pestaña:
Por lo tanto, puede inventar elementos html, es decir,
tabs
y dejar que angular maneje la representación de esos elementos.fuente