javascript - Angular-js con typescript - ¿deberían los datos almacenarse en controladores o en servicios?
Desarrollo un servidor de API web y recientemente comencé a desarrollar también el lado del cliente, que está desarrollado en Angular-js y TypeScript.
Tengo algo sobre lo que no estoy seguro respecto al diseño de mi código del lado del cliente.
Supongamos, por ejemplo, que tengo una vista que presenta una lista de elementos y el controlador de esta vista se crea muchas veces, cada vez que se hace clic en un botón (por ejemplo). Esta vista presenta una lista de elementos y, por lo tanto, este arreglo se recibe a través de Http GET en el controlador cada vez que se crea, y la vista tiene
ng-repeat="item in vm.items"
Sin embargo, me parece que si guardo esta lista en un servicio, que según mi comprensión se crea una sola vez por cliente, podría usar una única solicitud GET una vez cuando se crea el servicio y usarla en la vista de esta manera:
ng-repeat="item in vm.service.items"
Y las actualizaciones de esta lista de elementos ocurrirán únicamente a través del uso de SignalR.
¿Tiene el segundo enfoque sus defectos? Porque en este momento no puedo ver una razón para no hacerlo.
Respuesta #1
Sí, esto me suena como un servicio DAL clásico. Te recomendaría trabajar con una promesa allí para que puedas rastrear cuándo se resuelven los datos deseados. Aquí hay un ejemplo:
export class EntityProvider {
static serviceName: string = "entityProvider";
private entity = null;
static $inject : string[] = ["YourService", "$q"];
constructor(yourService: YourService, private mQService: ng.IQService) {
}
get getEntity(): ng.IPromise<ConnectionInfoDto[]> {
if (this.entity === null) {
return this.yourService.getEntity()
.then(result => {
this.entity = result.data;
return this.entity;
});
} else {
return this.mQService.when(this.entity);
}
}
static bootstrap(aModule: ng.IModule) {
return aModule.service(this.serviceName, EntityProvider);
}
}
