Servicios AngularJS independientes de los modules en varias páginas

Tengo una tabla de usuarios en la database detrás de mi aplicación angular. Tengo las vistas separadas de inicio de session, logging y administración de usuarios como páginas separadas.

Quiero definir un service que mantenga una list de objects de usuario a medida que se cargan. Si se consulta un nuevo usuario desde la database, el logging se debe pasar al service y el service debe devolver el object existente si está disponible o crear uno nuevo en caso contrario. Además, el service debería poder deshabilitar los objects no utilizados cuando se le indique, y esos objects deberían configurarse para objects de usuario no inicializados. Si posteriormente se llama a create, en lugar de crear un nuevo object, simplemente debe establecer el object antiguo.

También quiero definir un service (pero, ¿no debería llamarse service?) Que define un object de usuario. De esta forma, el usuario no será simplemente un object JSON analizado, sino que también estará decorado con methods para rastrear cualquier modificación y comprometer o revertir esos cambios.

Como tengo páginas separadas que usan el object de usuario. Me gustaría include los services en cada página. De acuerdo con los documentos de AngularJS, para registrar un service necesito hacer algo como:

var myModule = angular.module('myModule', []); myModule.factory('serviceId', function() { var shinyNewServiceInstance; //factory function body that constructs shinyNewServiceInstance return shinyNewServiceInstance; }); 

Sin embargo, este service está (por lo que puedo decir) en línea. No quiero copyr y pegar código. Quiero definir el service en un file separado. El service no debería tener idea de qué module lo está llamando. Debería existir para ser adjuntado a un module.

Intenté crear un file separado services/user.js con la siguiente syntax:

 $provide.service('users', UserService); 

Obviamente, esto hizo muy poco bien ya que $ provide no estaba definido. Sin embargo, no sé cómo inyectar la dependencia $provide en el service sin asociarlo a un module.

¿Hay alguna manera de definir un service independiente de un module? ¿Hay alguna manera de definir un model, decorado con la funcionalidad específica del model, independientemente de un module o service?

No puedes tener services huérfanos . Sin embargo, ese es el problema exacto que los modules resuelven.

Desea definir un module myBackend que contenga este service y luego dependa de este module en la aplicación que desee utilizar.

module myBackend :

 var myBackend = angular.module('myBackend', []); myBackend.factory('backendSerivce', function() { var shinyNewServiceInstance; //factory function body that constructs shinyNewServiceInstance return shinyNewServiceInstance; }); 

Donde quieres usar el service:

 var myModule = angular.module('myModule', [ 'myBackend' ]); myModule.controller('myShinyController', function (backendService) { // ... }); 

Ahora puede mantener sus diversas aplicaciones ajenas a la representación JSON de los objects y solo devolver objects User desde el service.

Un module por separado es definitivamente el path a seguir. Pero, si por algún motivo está cargando el file en otro momento, puede exponer $ provide a través del bloque de configuration de los modules principales. Esto podría ser algo así como:

 var myApp = angular.module('myApp',[]); myApp.config(function($controllerProvider,$filterProvider,$compileProvider,$provide){ myApp.register = { controller: $controllerProvider.register, directive: $compileProvider.directive, filter: $filterProvider.register, factory: $provide.factory, service: $provide.service, constant: $provide.constant }; }); 

Luego, en cualquier file cargado posteriormente, puede acceder a myApp.register... factory..service ..etc. Esta es a menudo la técnica utilizada si estás usando angular + require js