otro llamar funcion entre desde controladores controlador comunicacion javascript angularjs angularjs-scope angularjs-factory angularjs-rootscope

javascript - entre - llamar funcion angular desde html



¿Por qué usar $ rootScope para compartir datos entre los controladores cuando las fábricas pueden hacer lo mismo? (3)

El $ rootScope se proporciona para ver la jerarquía de ámbitos en la aplicación. Si tiene una tarea para modificar la jerarquía directamente (lo cual es muy raro: por ejemplo, corregir manualmente una pérdida de memoria causada por una biblioteca de terceros o algún emisor de eventos globales), entonces use $ rootScope.
En todos los otros 99% casos, los servicios deben ser utilizados.
Otras opiniones se pueden encontrar aquí .

Tengo entendido que $ rootScope es un tipo de variable global que permite que se comparta entre los controladores. Las fábricas también pueden hacer lo mismo. Entonces, ¿por qué no usar una fábrica? ¿Cuándo se debe usar $ rootScope y cuándo se debe usar Factory dado que sirven casi para el mismo propósito?


Las preguntas frecuentes de AngularJS ya responden muy bien aquí :

$ rootScope existe, pero puede ser usado para mal

Los ámbitos en angular forman una jerarquía, que hereda prototípicamente de un ámbito raíz en la parte superior del árbol. Por lo general, esto puede ignorarse, ya que la mayoría de las vistas tienen un controlador y, por lo tanto, un alcance propio.

Ocasionalmente hay datos que desea convertir en globales para toda la aplicación. Para estos, puede inyectar $ rootScope y establecer valores en él como en cualquier otro ámbito. Como los ámbitos heredan del ámbito raíz, estos valores estarán disponibles para las expresiones adjuntas a directivas como ng-show como valores en su $ scope local.

Por supuesto, el estado global apesta y debería usar $ rootScope con moderación, como lo haría (con suerte) con las variables globales en cualquier idioma. En particular, no lo use para el código, solo datos. Si está tentado de poner una función en $ rootScope, casi siempre es mejor ponerlo en un servicio que pueda ser inyectado donde sea necesario y más fácil de probar.

Por el contrario, no cree un servicio cuyo único propósito en la vida sea almacenar y devolver bits de datos.


Si desea almacenar algunos datos y conservarlos después del cambio de ruta, el servicio (de fábrica) es la mejor solución. $rootScope puede hacer lo mismo, pero es global, como usted mencionó, por lo que existe la posibilidad de romper sus datos. $rootScope es útil cuando necesita algunos eventos globales ( $rootScope.$broadcast ), por ejemplo, inicio / cierre de sesión de usuario, pero no para el almacenamiento de datos.