2016-12-06 7 views
1

私は安らかなサービスからのデータアクセスのために$リソースサービスを使用します。 $ resource( "path")の結果私はtypescriptドメインオブジェクトに入れました。問題は、私はこのような形でJSONを取得することです:安らぎのサービスからの結果のためのAngularJSオートマター

{ 
    "name_surname": "john_smith", 
    "years_of_employment": "10" 
} 

と、私はこのクラスのドメインオブジェクトにマップします:

class Employee { 
    constructor(public FullName: string, public YearsOfEmployment: number) { } 
} 

だから、ドメインクラス内のプロパティの名前の間に不一致があるとjsonフィールド。それらの2つの間のマッピングに使用できるanglejsモジュールはありますか、それを達成する最もエレガントな方法は何ですか?

答えて

0

私は自分のプロジェクトの1つでこれを使用しています。 短縮されたプロパティを開発用の読み取り可能なプロパティにマップします。 このスニペットが役立つかもしれません。

(function (angular) { 
    "use strict"; 

    angular.module("services.mapper", []).service("mapper", [function()  { 
     var models = { 
      employeeModelContract: { 
       name_surname: "FullName", 
       years_of_employment: "YearsOfEmployment" 
      } 
     }; 

     return { 
      map: map, 
      models: models 
     } 

     function map(smallObject, contract) { 
      var largeObject = {}; 
      for (var smallProperty in contract) { 
       if (contract.hasOwnProperty(smallProperty)) { 
        largeObject[contract[smallProperty]] = smallObject[smallProperty]; 
       } 
      } 
      return largeObject; 
     } 
    }]); 
})(angular); 

使用法:

var mappedObject = mapper.map(yourJson, mapper.models.employeeModelContract); 

はUPDATE 1(活字版):

class MapperService implements ng.IServiceProvider { 

    employeeModelContract:Object= { 
     name_surname: "FullName", 
     years_of_employment: "YearsOfEmployment" 
    }; 

    $get() { 
     return this; 
    } 

    map(smallObject, contract): Object { 
     var mappedObject: Object = {}; 
     Object.keys(contract).forEach(contractProperty => { 
      if (contract.hasOwnProperty(contractProperty)) { 
       mappedObject[contract[contractProperty]] = smallObject[contractProperty]; 
      } 
     }); 
     return mappedObject; 
    } 
} 

class Employee { 
    constructor(public FullName: string, public YearsOfEmployment: number) { } 
} 

class Controller implements ng.IController { 

    constructor(private mapper : MapperService){} 

    static $inject = ["MapperService"]; 

    json: Object = { 
     "name_surname": "john_smith", 
     "years_of_employment": "10" 
    } 

    $onInit(): void { 
     var mapped = <Employee>this.mapper.map(this.json, this.mapper.employeeModelContract); 
    } 
} 

angular.module("mapper", []).controller("Controller",Controller).provider("MapperService", MapperService); 
+0

私はtypescriptですが使用しているので、私はtypescriptですマッパーではなく、純粋ジャバスクリプトを探しています。 – bambi

+0

私は自分の答えを更新しました。たぶんこれがあなたを助けることができます。 – Danscho

+0

私は自分の答えと修正されたエラーを広げました。 – Danscho

関連する問題