Todo depende de lo que quieras de tu fragmento de código. Personalmente, si el código no tiene ninguna lógica, o ni siquiera necesita un controlador, entonces sigo ngInclude
. Normalmente coloco fragmentos html más grandes y "estáticos" que no quiero que abarroten la vista aquí. (es decir, digamos una tabla grande cuyos datos provienen del controlador padre de todos modos. Es más limpio <div ng-include="bigtable.html" />
que todas esas líneas que abarrotan la Vista)
Si hay lógica, manipulación DOM, o necesita que sea personalizable (también conocido como renderizado de manera diferente) en diferentes instancias en las que se usa, entonces directives
son la mejor opción (son desalentadoras al principio, pero son muy poderosas, dale tiempo) .
ngInclude
A veces verás ngInclude's
que se ven afectados por su exterior $scope
/ interface
. Como un repetidor grande / complicado, digamos. Estas 2 interfaces están unidas debido a esto. Si algo en los $scope
cambios principales , debe alterar / cambiar su lógica dentro de su parcial incluido.
Directivas
Por otro lado, las directivas pueden tener alcances / controladores / etc. explícitos. Entonces, si está pensando en un escenario en el que tendría que reutilizar algo varias veces, puede ver cómo tener su propio alcance conectado haría la vida más fácil y menos confuso.
Además, siempre que vaya a interactuar con el DOM, debe usar una directiva. Esto lo hace mejor para las pruebas y desacopla estas acciones de un controlador / servicio / etc., ¡que es algo que desea!
Sugerencia: asegúrese de no utilizar la restricción: 'E' si le interesa IE8. Hay formas de evitar esto, pero son molestas. Simplemente haz la vida más fácil y quédate con el atributo / etc.<div my-directive />
Componentes [Actualización 1/3/2016]
Agregado en Angular 1.5, es esencialmente un envoltorio .directve()
. El componente debe utilizarse la mayor parte del tiempo. Elimina una gran cantidad de código de directiva repetitivo, al establecer de forma predeterminada cosas como restrict: 'E', scope : {}, bindToController: true
. Recomiendo encarecidamente usarlos para casi todo en su aplicación, para poder realizar la transición a Angular2 más fácilmente.
En conclusión:
Debería crear componentes y directivas la mayor parte del tiempo.
- Más extensible
- Puede crear una plantilla y tener su archivo de forma externa (como ngInclude)
- Puede optar por utilizar el ámbito principal o su propio ámbito aislado dentro de la directiva.
- Mejor reutilización en toda su aplicación
Actualización 1/3/2016
Ahora que Angular 2 está terminando lentamente, y conocemos el formato general (por supuesto, todavía habrá algunos cambios aquí y allá) solo quería agregar lo importante que es hacerlo components
(a veces directivas si necesita que sean restringidas: ' E 'por ejemplo).
Los componentes son muy similares a los de Angular 2 @Component
. De esta manera estamos encapsulando lógica y html en la misma área.
Asegúrese de encapsular tantas cosas como pueda en los componentes, ¡hará que la transición a Angular 2 sea mucho más fácil! (Si elige hacer la transición)
Aquí hay un buen artículo que describe este proceso de migración usando directives
(muy similar si iba a usar componentes, por supuesto): http://angular-tips.com/blog/2015/09/migrating-directives-to-angular-2/