Kurzfassung: Ich habe angeblich einige Org-Objekte, die Klassenmethoden haben. Aber wenn ich meine Daten abrufe, sehe ich Objektinstanzen, keine Org-Instanzen. Ist dies das beste verfügbare Ergebnis? Oder kann ich mein Programm überzeugen, mir Org-Objekte zu geben?AngularJS 2 Ein Promise Resolution verliert Klassenidentität beim Fechen
DETAILS: Ich arbeite mit einer neuen Version von Angular 2. Mein Code ändert geringfügig einige Tutorial-Code. Hier ist ein Teil meiner 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));
}
Hier ist ein Teil meiner Resolver:
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;
}
});
}
ich meine Daten über einen In-Memory-Service holen:
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]
Und ist meine Org Klasse wie folgt:
export class Org {
id: number;
donor: boolean;
name: string = "";
deepCopy(): Org { ... }
equals(other: Org): boolean { ... }
}
Wenn ich meine Daten am Haltepunkt anschaue, sehe ich ein Objekt mit den Feldern (ID, Spender, Name), aber ohne Funktionen. Ich sehe dort auch keine Definition von Org - wenn ich "org instanceof Org" anrufe, bekomme ich einen Fehler, dass Org nicht gefunden werden kann. Und "typeOrg" ergibt "Objekt".
Ich möchte equals() usw. als Org-Klasse-Methode haben. Aber zur Zeit habe ich nur Javascript-Objekte, die wie Org nur durch Duck-Typ sind. Kann ich es besser machen?
Danke, Jerome.
Das ist für mich arbeiten. In meinem obigen Beispiel ändert sich die getOrgs(). Then() zu .then (response => response.json(). Data.map ((d: any) => neue Org (d)) als Org []). Ich danke dir sehr! –