/ / AngularJS 2 a Sľubné rozhodnutie stráca identitu triedy po fechingu - uhlové, strojopisné, sľubné, uhlové sľubné

AngularJS 2 a Sľubová rezolúcia stráca identitu triedy pri spánkovaní - angulárny, strojopisný, sľubný, angulárny-sľub

SÚHRN: Údajne som vyzdvihol niektoré Orgove objekty, ktoré majú triedne metódy. Ale keď načítam svoje údaje, vidím inštancie objektov, nie inštancie orgánov. Je to najlepší dostupný výsledok? Alebo môžem presvedčiť svoj program, aby mi dal objekty Org?

PODROBNOSTI: Pracujem s najnovšou verziou Angular 2. Môj kód mierne upravuje niektoré učebné kódy. Tu je časť môjho 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));
}

Tu je časť môjho prekladača:

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

});
}

Preberám svoje údaje prostredníctvom služby v pamäti:

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]

A moja trieda Org je takáto:

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

deepCopy(): Org { ... }

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

Keď sa pozriem na svoje údaje v bode prerušenia, vidímobjekt, ktorý má polia (id, darca, meno), ale nemá funkcie. Nevidím tam ani definíciu Org - ak zavolám „org instanceof Org“, dostanem chybu, že Org ju nenájdu. A „typeof org“ poskytuje „objekt“.

Ako metódu triedy Org by som chcel mať rovnosť () atď. Ale v súčasnosti mám iba objekty Javascript, ktoré sú Páči sa mi to Org iba písaním kačíc. Môžem sa z toho zlepšiť?

Vďaka, Jerome.

odpovede:

1 pre odpoveď č. 1

Zostavte Org inštancia od JSON.

Niečo ako:

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

Potom definujte, ako zostaviť Org napríklad v deklarácii triedy napr .:

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;
}
...
}