2017-12-18 5 views
1

Back-End und Typoskript funktioniert gut, da im Browser Netzwerk-Registerkarte bekomme ich was ich will, mein Problem ist, dass ich in HTML stecke ... Ich weiß nicht wie um die Daten anzuzeigen. HierErhalten von relationalen Daten mit Angular cli Front-End stecken

ist, was ich, was ich in die Konsole aus meinem Web-api 2:

{ 
"Id":1, 
"Name":"testete", 
"Description":"Test", 
"DueDate":"2017-1205T15:14:27.307", 
"IsCompleted":true, 
"Worker": 
[ 
    { 
    "Id":1, 
    "FirstName":"Johnny", 
    "LastName":"Doe", 
    "Job":[] 
    }, 
    {"Id":2,"FirstName":"yyyy","LastName":"yyyyy","Job":[]}, 
    {"Id":3,"FirstName":"bbbbb","LastName":"vvvvvvvv","Job":[] 
    } 
] 

}

Das ist mein Modell in Fall nicht richtig:

export class Jobs { 
Id: number; 
Name: string; 
Description: string; 
DueDate: Date; 
IsCompleted?: boolean; 

worker: Worker[]; 

}

Dies ist mein Versuch in HTML-Komponente, um die Daten anzuzeigen:

<label class="labelInputs">Workers Assigned to this job</label> 
<div *ngFor="let job of jobs"> 
    <div *ngFor="let worker of job.worker"> 
     <label class="labelInputs" value="worker"> 
      {{worker.FirstName}} 
     </label> 
    </div> 
</div> 

ich diesen Fehler: ERROR Error: Cannot find a differ supporting object '[object Object]' of type 'object'. NgFor only supports binding to Iterables such as Arrays.

Es könnte irreführend sein, weil ich nicht einmal wissen, wie etwas verschachtelt angezeigt werden so, wenn jemand mir zeigen kann, würde ich es sehr schätzen.

Ich möchte nur den Vornamen der Arbeiter in Etiketten anzeigen, die in "Worker" vorhanden sind, das ist alles.

Vielen Dank

EDIT: Dies ist, wie ich meine Jobs zu bekommen.

getJobs(): void { 
    const id = +this.route.snapshot.paramMap.get('id'); 
    this.jobsService.getJob(id) 
     .subscribe(jobs => this.jobs = jobs); 
} 

Das ist mein Service:

getJob(id: number): Observable<Jobs> { 
    const url = `${this.apiURL}/${id}`; 

    return this.http.get<Jobs>(url); 
} 

Hier Initialisierung von Jobs und Arbeiter als Arrays oder Objekte:

@Input() jobs: Jobs; 

public Job: Jobs; 
public Jobs: Jobs[]; 

public workers: Worker[]; 
public worker: Worker; 
+1

Wo 'jobs = Array ()'? – Zze

Antwort

3

Ich glaube, Sie Ihre erste *ngFor Schleife exlude wollen, wie Sie können iteriere ein Objekt nicht.

<label class="labelInputs">Workers Assigned to this job</label> 
<div *ngFor="let worker of Jobs.worker"> 
    <label class="labelInputs" value="worker"> 
     {{worker.FirstName}} 
    </label> 
</div> 

Sie müssen auch Jobs und Arbeiter füllen.

So ...

export class Jobs { 
... 
    constructor(){ 
    this.Workers = new Array<Worker>(); 
    } 
} 

Dann müssen Sie die Daten hinzufügen, die Sie von dem Server über so etwas wie erhalten:

job = new Jobs(); 
for each(var worker in data.Worker){ 
    Job.Workers.push(worker as Worker); 
} 

Update:

Hier ist ein Arbeiten plunkr, die dies besser demonstriert.

+0

Ich fühle mich wie du bist richtig, aber ich bin so schlecht mit Angular. Also habe ich 'Jobs: Jobs [];' definiert oder so 'jobs = Array () 'in meiner ts-Komponente und in diesem' Jobs.worker' steht "worker is not defined". Wenn ich so vorgehe "Job: Jobs;" Mein Intellsense sieht den Arbeiter aber hier: '{{Arbeiter.Vorname}} "Ich bekomme" Vorname ist nicht definiert " – Eduard

+1

Bitte beachten Sie mein Update @ Eduard. Sie müssen Jobs korrekt instanziieren - nicht nur das Array. :) – Zze

+0

Ok, es wird verwirrend. Zuallererst "ein Konstruktor kann keinen dieser Parameter haben" arbeitet er in ngOnInit. Aber dann, wo geht das für jeden? Um meine Jobs zu bekommen, habe ich die Methode in der Frage verwendet, die ich gerade bearbeitet habe. Da sollte ich meine Foreach benutzen? – Eduard