Angular2 Warten HttpPost-Antwort
Ich habe eine angular2 app im Typoskript. Ich mache eine HTTP Post-Anforderung, um einen Eintrag erstellen. Diese post-request passiert, feinen und der Datensatz gespeichert wird, jedoch habe ich wieder die neue Platte aus dem service und ich möchte hinzufügen, dass es eine Liste in meine Komponente und aktualisieren Sie den DOM mit dem neu erstellten Datensatz. Jedoch, es scheint nie zu zurück in der Zeit, ist es eine anerkannte Methode für die Verarbeitung halt, bis es wieder oder erkennen Veränderungen in meinem array und dann aktualisieren Sie die DOM?
Mein service-Methode ist wie folgt:
public AddComment = (comment: RepackComment): Observable<RepackComment> => {
var json = JSON.stringify({ comment : comment.Comment, rr_id : comment.RepackId, comment_by : comment.CommentBy });
return this.http.post(this.commentUrl + 'Add', json, {headers: this.headers})
.map((response: Response) => <RepackComment>response.json())
.catch(this.handleError);
}
- Und das ist meine Komponente Methode:
saveComment(): void{
console.log(this.newComment);
this.repackService.AddComment(this.newComment)
.subscribe((data: RepackComment) => this.addedComment = data,
error => console.log(error),
() => console.log('Finished creating new comment'));
console.log("added Comment: " + this.addedComment);
this.comments.push(this.addedComment);
this.addNewComment = false;
}
So, wenn this.addedComment
aufgefüllt wurde mit der return-Wert, möchte ich hinzufügen, dass es um die this.comments
array. ich habe dann ein flag setzen, genannt this.addNewComment
welche schaltet zwischen der Eingabe-und Anzeige-Felder auf dem front-end zur Anzeige der Daten.
Vielen Dank im vorraus!!!!!!
BEARBEITEN
Wie gewünscht ist hier der entsprechende Teil meiner Vorlage für diese Kommentare. ich benutze PrimeNG für meine Komponenten:
<p-dataList [value]="comments" [hidden]="addNewComment">
<header style="height:30px;">
<button pButton type="button" label="Add Comment" (click)="addComment()" class="actionBtn" style="float:left;width:150px;"></button>
<span style="margin-left:-105px;font-size:20px;">Comments</span>
</header>
<template let-comment>
<div class="ui-grid ui-grid-responsive ui-fluid" style="font-size:16px;padding:20px;border-bottom:1px solid #D5D5D5;" >
<div class="ui-grid-row">
<div class="ui-grid-col-12">
<div class="ui-grid ui-grid-responsive ui-fluid comment">
<div class="ui-grid-row row-div">
<div class="ui-grid-col-3 labelFor">ID: </div>
<div class="ui-grid-col-7 displayFor">{{comment.ID}}</div>
</div>
<div class="ui-grid-row row-div">
<div class="ui-grid-col-3 labelFor">Comment: </div>
<div class="ui-grid-col-7 displayFor">{{comment.Comment}}</div>
</div>
<div class="ui-grid-row row-div">
<div class="ui-grid-col-3 labelFor">Author: </div>
<div class="ui-grid-col-7 displayFor">{{comment.CommentBy}}</div>
</div>
</div>
</div>
</div>
</div>
</template>
</p-dataList>
/*INPUT COMPONENTS*/
<div class="ui-grid ui-grid-responsive ui-fluid" style="font-size:16px;padding:20px;border-bottom:1px solid #D5D5D5;" [hidden]="!addNewComment">
<div class="ui-grid-row">
<div class="ui-grid-col-12">
<div class="ui-grid ui-grid-responsive ui-fluid comment">
<div class="ui-grid-row row-div">
<div class="ui-grid-col-3 labelFor">Comment: </div>
<input type="text" pInputText [(ngModel)]="newComment.Comment" class="displayFor"/>
</div>
<div class="ui-grid-row row-div">
<div class="ui-grid-col-3 labelFor">Author: </div>
<input type="text" pInputText [(ngModel)]="newComment.CommentBy" class="displayFor"/>
</div>
</div>
</div>
</div>
<br/>
<div class="div-row" style="margin-left:40%;">
<button pButton type="button" label="Cancel" (click)="cancelComment()" class="actionBtn" style="width:150px;"></button>
<button pButton type="button" label="Save" (click)="saveComment()" class="actionBtn" style="width:150px;"></button>
</div>
</div>
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wie Sie bemerkt:
Observables
Arbeit async - so alles nach Ihrer.subscribe
nennen, wahrscheinlich wird aufgerufen, bevor der code in der.subscribe
Rückruf.Zu beheben, müssen Sie den code, das hängt davon ab, die Ergebnisse der
subscribe
Aufruf in seiner callback:Auch das Objekt, das Sie wieder aus deinem Beitrag nennen, entspricht nicht Ihrer Vorlage. Ich würde vorschlagen, diese Veränderung in Ihrem
AddComment
Anruf mitRepackComment
mit einer solchen Konstruktor:"added Comment: { ... }"
? Wie sieht dein template Aussehen?added Comment: [object Object]
damit ich nicht bekommen ein json-Objekt oder etwas, dessen nur den text[object Object]
console.log(this.addedComment);
, so dass es zeigt das gesamte Objekt und prüfen, ob es leer istthis.addedComment
ist die richtige Objekt, die Sie könnten versuchen, schneiden Sie die array - vielleichtprimeNG
nicht die Veränderungen, die für einige ungerade Grund:this.comments.push(this.addedComment); this.comments = this.comments.slice();
.slice([begin[, end])
Methode ermöglicht es Ihnen, zu extrahieren, die einen bestimmten Bereich eines Arrays zu einem neuen array. Sie können sich jedoch ohne Argumente, die Kopien, die das gesamte array in einen neuen.console.log(this.addedComment);
dann? Das ist wirklich seltsam :Ssave
nennen, hat eine andere Struktur als Ihre Vorlage erwartet.id
vsID
,comment
vsComment
,comment_by
vsCommentBy
.