2016-11-16 86 views
4

我正在玩Angular2,希望有人能提供一些建議,如何實現這一點;如何在模型中定義嵌套對象? (angular2/typescript)

例如,如果我的模型目前看起來像這樣的員工:

export class Employee { 
    constructor(
     public firstName: string, 
     public lastName: string, 
     public email: string, 
     public days: string, 
     public hours: string, 
    ){} 
} 

,我想以天/小時放入自己的對象,怎麼可能實現?

(即如..)

public availability: { 
     public days: string, 
     public hours: string 
}, 

,然後將在HTTP GET請求保持不變像下面?

getEmployees() { 
     return this.http.get('...') 
      .map((response: Response) => { 
       const data = response.json().obj; 
       let objs: any[] = []; 

       for(let i = 0; i < data.length; i++) { 
        let employee = new Employee(
        data[i].firstName, 
        data[i].lastName, 
        data[i].email, 
        data[i].availability.days, 
        data[i].availability.hours 
        ); 

        objs.push(employee) 
       } 
       return objs 
      }) 
      } 

只是爲了澄清,我想我的請求返回類似的東西;

var obj = { 
    firstName: "test", 
    lastName: "test", 
    email: "test", 
    availability: { 
     days: "test", 
     hours: "test" 
    } 
    } 

希望有人能幫幫忙!我試圖環顧四周,但沒有遇到任何可以提供幫助的東西。

回答

7

像這樣的事情

export class Employee { 
    constructor(
     public firstName: string, 
     public lastName: string, 
     public email: string, 
     public availability: Availability // refer to type Availability below 
    ){} 
} 

export class Availability { 
    constructor(
     public days: string, 
     public hours: string 
    ){} 
} 

HTTP GET請求應保持不變,然後改變你如何建立員工的新實例使用這個例子

let employee = new Employee(
    data[i].firstName, 
    data[i].lastName, 
    data[i].email, 
    new Availability(
      data[i].availability.days, 
      data[i].availability.hours 
    ) 
); 
+1

嗨,我得到的錯誤 - '無法找到'可用'的名稱.'是服務中出現的內容,以及類文件 - '';' expected'。除非你導入它,否則我認爲'export class Availability'在Employee類中是不可見的? – confusedandenthused

+0

@confusedandenthused是的抱歉,'Availability'類應該有它的構造函數,我已經修復它,然後在'Employee'類和你的服務中導入'Availability'類。 – Michael

+1

謝謝 - 這讓它工作!另外值得注意的是,您必須將新類導入組件才能使其正常工作。 – confusedandenthused