angular - Model içinde iç içe geçmiş bir nesneyi nasıl tanımlarım? (angular2/typescript)


Angular2 ile oynuyorum ve birinin bunu başarmanın yolları hakkında bazı tavsiyeler verebileceğini umuyordum;

Örneğin, modelim şu anda bir çalışan için bu şekilde görünüyorsa:

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

ve günleri/saatleri kendi nesnelerine yerleştirmek istiyorum, bu nasıl başarılabilir?

(yani gibi..)

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

ve sonra HTTP GET isteği aşağıdaki gibi aynı mı kalır?

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
             })
          }

Sadece netleştirmek için, get isteğimin something like döndürmesini isterim;

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

Umarım birisi yardım edebilir! Etrafına bakmaya çalıştım ama yardımcı olabilecek bir şeyle karşılaşmadım.

Cevap #1

Böyle bir şey

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 isteği aynı kalmalı, sonra çalışan için yeni örneği oluşturma şekli değiştirilmeli

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

Cevap #2

Kişisel olarak ( Ionic projesi için ) şöyle bir şey yaptım

export class Availability {
    days: string  = "";
    hours: string = "";
}

export class Employee {
    firstName: string = "";
    lastName:  string = "";
    email:     string = "";

    availability = new Availability()
}

Yani bu modelleri bir <form> içinde kullanırsam, bu Employee sınıfının boş bir yapısını alıyorum.

Ayrıca, örneğin bir Firebase veritabanına sorgu yaptığımda employeeObservable : Observable<Employee[]>; gibi değişkenleri bildirdiğimde de çalışıyor...

İlgili makaleler