2017-01-04 5 views
2

РЕЗЮМЕ: Я предположительно беру некоторые объекты Org, которые имеют методы класса. Но когда я беру свои данные, я вижу экземпляры Object, а не экземпляры Org. Это лучший доступный результат? Или я могу убедить свою программу предоставить объекты Org?AngularJS 2 a Решение Promise теряет идентификатор класса после feching

ДЕТАЛИ: Я работаю с последней версией Angular 2. Мой код немного изменяет код учебника. Вот часть моего org.service.ts:

getOrgs(): Promise<Org[]> { 
    return this.http 
    .get(this.orgUrl) 
    .toPromise() 
    .then(response => response.json().data as Org[]) 
    .catch(this.handleError); 
} 

getOrg(id: number): Promise<Org> { 
    return this.getOrgs() 
    .then((orgs: Org[]) : Org => orgs.find(org => org.id === id)); 
} 

Вот часть моего разрешения имен:

resolve(route: ActivatedRouteSnapshot): Promise<Org>|boolean { 
    let id = this.authService.user.orgId; 

    return this.orgService.getOrg(id).then((org: Org) : Org|boolean => { 

    if(org) { // <-- Breakpoint here 
     return org; 
    } else { 
     // If the Org isn't available then the edit page isn't appropriate. 
     this.router.navigate(['/provider/home']); 
     return false; 
    } 

    }); 
} 

Я выборка моих данных через в памяти службы:

export class InMemoryDataService { 

    createDb() { 
    let org1 = new Org(); 
    org1.id = 12; 
    org1.donor = true; 
    org1.name = 'Great Actors Theater'; 
    let org2 = new Org(); 
    org2.id = 19; 
    org2.donor = false; 
    org2.name = 'Sunnyside Group Home'; 
    let org: Org[] = []; 
    org.push(org1); 
    org.push(org2); 
[SNIP] 

И мой класс Org, как это:

export class Org { 
    id: number; 
    donor: boolean; 
    name: string = ""; 

    deepCopy(): Org { ... } 

    equals(other: Org): boolean { ... } 
} 

Когда я просматриваю свои данные в точке останова, я вижу объект, у которого есть поля (id, donor, name), но нет функций. Я также не вижу определения Org там - если я вызываю «org instanceof Org», я получаю сообщение об ошибке, что Org не может быть найден. И «typeof org» дает «объект».

Я хочу иметь equals() и т. Д., Как метод класса Org. Но в настоящее время у меня есть только объекты Javascript, которые являются , как Org только утка-типизация. Могу ли я поправляться?

Thanks, Jerome.

ответ

1

Построить экземпляр Org от JSON.

Что-то вроде:

.then(response => { 
    // validate response 
    return response.json().data.map(d => new Org(d)) 
}) 

Затем определить, как построить Org экземпляр в объявлении класса например:

export class Org { 
    id: number; 
    donor: boolean; 
    name: string = ""; 

    constructor(data: any) { 
    // validate data 
    this.id = data.id; 
    this.donor = data.donor; 
    this.name = data.name; 
    } 
    ... 
} 
+0

Это работает для меня. В моем примере выше getOrgs(), затем() изменится на .then (response => response.json(). Data.map ((d: any) => новый Org (d)) как Org []). Спасибо огромное! –