2017-02-05 9 views
0

私のサービスでは、JSON APIによって提供される情報をモデルに渡す必要があります。これを行う最善の方法は何ですか?現時点で JSON APIからTypeScriptモデルへデータを渡す方法

は、私はこれをやっている:

import { Attachment } from '.'; 

export class Contact { 
    id: number; 
    attachments: Attachment[] = []; 

    static fromJSON(data) { 
    let contact = new Contact(); 
    contact.id = data.id; 

    // Attachments? 
    for(let attachment of data.attachments) { 
     contact.attachments.push(Attachment.fromJSON(attachment)); 
    } 
    return contact; 
    } 
} 

} 

がより良いアイデアがありますか?

答えて

1

私がよく理解していれば、サービスから返されたJSON文字列の情報を取得したいと考えています。

JSONを取得するには、次のようにしてください。この時点で

that.db.getTodoListFromServer(this) 
       .done(msg => { 
        if (msg != undefined) { 
         //in msg you have your JSON object 
       }) 
       .fail(msg => { 
       }); 

あなたはJSON文字列のクラス構造を知っていれば、あなたの溶液中で行ったように、あなたのモデルに要素によって直接要素を渡すことができる2つの事

  1. を行うことができます。

2.返されたJSONオブジェクト(typescriptサポートインターフェイス)の構造を持つインターフェイスを作成します。以下の例では、インタフェースIToDoModelを作成しました。返されるJSONは、インターフェースと同じ構造を持っていることがわかっているので、インターフェースにJSONreturnを割り当てたときにエラーは発生しません。

export interface ToDoModel { 
     Id: number; 
     ToDo: string; 
    } 

... 

that.db.getTodoListFromServer(this) 
      .done(msg => { 
       if (msg != undefined) { 
        //this json return a list of IToDoModel 
        var todo: Array<ToDoModel> = msg; 
       }) 
      .fail(msg => { 
        //Manage Error 
      }); 

私はあなた

+0

Iプレフィックスを削除することを検討してください。 –

+1

ありがとうHaddad。私はPascalCaseのインターフェース名を編集しました。 – freedeveloper

0

最も簡単な方法は、直接Array<Attachment>に添付ファイルをキャストしているこのヘルプを願っています。

import { Attachment } from '.'; 

export class Contact { 
    id: number; 
    attachments: Attachment[] = []; 

    static fromJSON(data) { 
    let contact = new Contact(); 
    contact.id = data.id; 

    // cast attachments json to `Array<Attachment>`. 
    contact.attachments = <Array<Attachment>>data.attachments; 

    return contact; 
    } 
} 
} 
関連する問題