que cloak angularjs dependency-injection

angularjs - cloak - ¿Qué es la inyección amigable?



ng-hide (4)

En AngularJS, puede inyectar dependencias de varias maneras:

  • En la función de link la directiva por posición.
  • en la definición de directiva por nombre
  • en la función del controlador por nombre
  • en la función de fábrica por nombre
  • en la función de servicio por tipo

La inyección fácil de usar le permite invocar implícitamente una función de constructor por referencia:

myApp.service(''Pattern'', ["Infinity", RegExp]);

En lugar de usar explícitamente la new palabra clave:

myApp.factory(''Pattern'', ["Infinity", function(Infinity) { return new RegExp(Infinity); } ]);

O

function goInfinity(Infinity) { return new RegExp(Infinity); } goInfinity.$inject = ["Infinity"]; myApp.factory(''Pattern'', goInfinity);

La receta de Servicio produce un servicio como las recetas de Valor o Fábrica, pero lo hace invocando a un constructor con el nuevo operador. El constructor puede tomar cero o más argumentos, que representan dependencias necesarias para la instancia de este tipo.

La inicialización impaciente significa que una receta constant debe devolver un constructor para usar la sintaxis mencionada anteriormente:

function RegExpConstant() { return new RegExp(Infinity); } myApp.constant(''Pattern'', RegExpConstant)

en lugar de devolver una función, objeto o valor literal.

La nomenclatura proviene de Java:

Un servicio es un conjunto bien conocido de interfaces. Un proveedor de servicios es una implementación específica de un servicio. Una fábrica es un objeto que devuelve una referencia de objeto a otro objeto.

Referencias

En la documentación de AngularJS , hay una explicación de las diferencias entre una fábrica, un servicio, un valor, una constante y un proveedor.

Al final , tenemos una tabla de comparación: Una de las filas es "inyección amigable". No pude entender lo que es.

Qué significa eso? Además, ¿qué significa que, para que un valor tenga esta "inyección amigable con el tipo", tenga el costo de una "inicialización impaciente utilizando un nuevo operador directamente"?


Mi interpretación de "inyección amigable tipo":

Las fábricas y los proveedores inyectan lo que sea devuelto por la función de fábrica y la función $ get respectivamente, lo que podría ser de cualquier tipo y podría cambiar dinámicamente en tiempo de ejecución. Mientras que las inyecciones Service, Constant y Value son de un tipo fijo que Angular conoce, ya que está bien definido durante la definición de la receta. Por lo tanto son inyecciones amigables para el tipo.


Simplemente me hice la misma pregunta cuando miraba la misma mesa. :-)

Mi mejor interpretación de los valores en esa fila de la tabla es que en realidad significa " si puede averiguar qué creó la instancia de servicio desde la propia instancia de servicio ", es decir, " si la propiedad de constructor la instancia de servicio está configurada para una función significativa ".

Aquí hay una interpretación más detallada para cada una de las recetas:

  • fábrica : no , pero puede ser si construye el valor devuelto llamando al new operador
  • servicio : - hará referencia a la función de receta de servicio
  • valor / constante : , pero solo si construye el valor llamando al new operador
  • proveedor : no , pero puede ser si construye el provider.$get el valor de retorno del método llamando al new operador internamente)

Tal como está ahora, esta parte de la documentación parece inacabada y es posible que el autor haya tenido varias ideas de lo que quería mostrar aquí, pero la documentación final logró deslizarse a través de las grietas y se publicó en algún estado intermedio.


Tipo aquí se refiere a:

  • primitivas,
  • literales objeto,
  • funciones, o
  • incluso una instancia de un tipo personalizado

Las fábricas y los proveedores son más flexibles fuera del servicio, constante, valor en términos de lo que se unen al inyector. Por lo tanto, Angular puede detectar el tipo de objeto / primitivo que está vinculado a Servicio, Constante, Valor, por lo tanto, más amigable, ya que conocemos el tipo por adelantado (diseño / tiempo de construcción).