2016-11-16 72 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