2017-05-04 9 views
0

をモデル化するためにHTTPオブジェクトの地図、ここで私が働いているものです:私は私のモデルにHTTPオブジェクトをマッピングトラブルを抱えている

MyObjController.ts

class MyObjController { 
     constructor (
      private myObj:myObjService, 
      private $scope:angular.IScope, 
      private modal, 
      private notifier, 
      private $translate, 
      private $state, 
      public items:MyObjModel[], 
      public loading 
     ) { 
      this.loading = this.myObj.all(); 

      this.loading.then((allItems) => { 
       this.items = allItems; 
      }); 
     } 
} 

MyObjService.ts

all() : angular.IPromise<MyObjModel[]> { 
      let uri = `/myuri`; 

      return this.api.get(uri).then((response:any) => { 
       return _.map(response.data, MyObjModel.create); 
      }); 
     } 

MyObjModel.ts

export class MyObjModel { 
     constructor() { } 

     id:string; 
     name:string = ''; 
     organizationId:string = ''; 

     static create (apiResponse) { 
      let model = new MyObjModel(); 

      model.id = apiResponse.Id; 
      model.name = apiResponse.Name; 
      model.organizationId = apiResponse.OrganizationId; 

      return model; 
     } 
    } 

このアプローチは、_.mapが私のresponse.dataから各値を送信し、それぞれのプロパティに対してMyObjModelの新しいインスタンスを作成し、次にモデルの配列を作成するため動作しません。私はresponse.dataをcreate()関数全体に送信し、その値をモデルの単一のインスタンスにマップし、その単一のモデルを返す方法を探しています。

ありがとうございます!

答えて

1

あなたは以下のコードを使用する必要があり、あなたが代わりにクラスとコンストラクタのインタフェースを使用することができます

all() : angular.IPromise<MyObjModel[]> { 
      let uri = `/myuri`; 

      return this.api.get(uri).map(data=><MyObjController>data.json())).toPromise(); 
      }); 
     } 

にもお勧めです

+0

あなたが少しをしてください説明する気にしませんか?これはうまくいかないと思っています。なぜなら、モデルの代わりにMyObjControllerを使用するような特定のことをした理由を知りたいからです。それを修正するようにしてみることができます – jlee

+1

'.then'を使うべきではありません。あなたは 'all'メソッドの戻り値の型に従って約束を返しています。インターフェイスを使用する代わりに、クラスをモデルとして機能させる必要はありません。 – Aravind

関連する問題