2016-07-31 18 views
2

私はWeb APIサーバーを開発し、最近Angular-jsとtypescriptで開発されたクライアント側の開発も開始しました。typescriptを使用した角度 - コントローラまたはサービスにデータを保存する必要がありますか?

クライアントサイドコードの設計に関してわからないことがあります。

たとえば、アイテムのリストを表示するビューがあり、このビューのコントローラは、ボタンがクリックされるたびに何度も作成されます。それは私には思える、このビューには、項目のリストを提示し、したがって、この配列は、コントローラ内のHTTP GET throguhそれが作成されるたびにreceievedされ、ビューは

ng-repeat="item in vm.items" 

しかし持っている私は、上のこのリストを保存する場合私の理解からのみ、クライアントごとに一度作成されたサービス、私はサービスが作成されたときに一度、単一のGETリクエストを使用して、このようなビューでそれを使用することもできます項目のリストに

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

と更新されますシグナルだけの使用を通して起こります。

2番目のアプローチに欠陥がありますか?今は私がそうしない理由を見ることができないからです。

答えて

0

はい、これは古典的なDALサービスのようです。そこに約束して作業することをお勧めします。そうすれば、いつ所望のデータが解決されたかを追跡することができます。ここに例があります:

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

詳細を少し書きましたか?現在、私はサービスctorで何を持っています:$ http.get( "..")。success(function(data){ListService.service.items = data;});違うの? –

+0

私はコンストラクタの代わりにゲッターの値を解決し、解決されたオブジェクトの代わりに約束を返します。 –

+0

ああ、あなたはそれを怠惰な初期化として機能させましたか?しかし、なぜ私は約束を返す必要がありますか?サーバーへのリクエストが成功した場合、私は上記のように、コントローラで何も処理せずにリクエストを行ったサービスの配列にデータを保存したいだけです。バインディングはサービスに保持されている配列に直接行われます –

関連する問題