2016-07-31 32 views
2

Ich entwickle einen Web-API-Server und habe kürzlich auch die Client-Seite entwickelt, die in Angular-js und Typoskript entwickelt wurde.Angular-js mit Typoskript - sollen Daten in Controllern oder Diensten gespeichert werden?

Ich habe etwas, über das ich bezüglich des Entwurfs meines clientseitigen Codes nicht sicher bin.

Sagen Sie zum Beispiel, dass ich eine Ansicht habe, die eine Liste von Elementen darstellt, und der Controller dieser Ansicht wird jedes Mal erstellt, wenn auf eine Schaltfläche geklickt wird (zum Beispiel). Diese Ansicht zeigt eine Liste der Elemente und deshalb wird dieses Array throguh Http GET in der Steuerung jedes Mal receieved es erstellt wird, und die Aussicht hat

ng-repeat="item in vm.items" 

Allerdings scheint es mir, dass, wenn ich spare diese Liste auf einem Service, der aus meinem Verständnis nur einmal pro Client erstellt wird, konnte ich eine einzige GET-Anforderung einmal verwenden, wenn der Dienst erstellt wird und es in der Ansicht wie folgt verwenden:

ng-repeat="item in vm.service.items" 

und Aktualisierungen dieser Liste der Elemente wird passieren nur durch den Signalgeber.

Hat der zweite Ansatz seine Fehler? Weil ich momentan keinen Grund sehe, das nicht zu tun.

Antwort

0

Ja, das klingt nach einem klassischen DAL-Service für mich. Ich würde Ihnen empfehlen, dort mit einem Versprechen zu arbeiten, damit Sie verfolgen können, wann die gewünschten Daten aufgelöst werden. Hier ist ein Beispiel:

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); 
     } 
    } 
+0

Können Sie diese Funktion erklären, die Sie ein wenig in mehr Details schrieben? Gerade jetzt, was ich in Service ctor: $ http.get (".."). Erfolg (Funktion (Daten) {ListService.service.items = Daten;}); ist es anders? –

+0

Ich löse den Wert im Getter anstelle des Konstruktors auf und gebe ein Versprechen anstelle des aufgelösten Objekts zurück. –

+0

Ah hast du es als faule Initalisierung gemacht? Warum sollte ich jedoch ein Versprechen abgeben müssen? wenn die Anfrage an den Server erfolgreich ist, möchte ich nur die Daten in einem Array in dem Dienst, der die Anfrage gemacht hat, ohne es in der Steuerung in irgendeiner Weise zu behandeln, wie ich oben erwähnt. Die Bindung wird dann direkt zu dem Array im Service –