Ich habe die übergeordnete Komponente wie folgt aus:@Input mit Versprechen Angular2
import { Component } from '@angular/core';
import { UrlService } from '../../services/url.service';
@Component({
selector: 'wrapPost',
templateUrl: './app/html/wrapPost.component.html',
})
export class WrapPost {
dataPost: any;
url: string;
constructor(private urlService: UrlService) {}
ngOnInit(){
let url = window.location.pathname;
this.urlService.getData(url)
.then(res => this.dataPost = res);
}
}
gibt es eine stammt aus dem Server erhalten und zurück this.dataPost. Das funktioniert gut.
Diese html von Eltern templateUrl: './app/html/wrapPost.component.html'
<div class="noteCommonAlign">
<navigation></navigation>
<posts [dataPost]="dataPost"></posts>
<loading class="noteCommonAlign"></loading>
<pagination [dataPost]="dataPost"></pagination>
</div>
Weitere Komponente Paginierung (das Kind)
import { Component, Input, SimpleChanges } from '@angular/core';
@Component({
selector: 'pagination',
templateUrl: './app/html/pagination.component.html',
styleUrls: ['app/css/pagination.component.css']
})
export class Pagination {
pagCurrent: number;
@Input() dataPost: any;
constructor(){
}
ngOnChanges(changes: SimpleChanges){
try{
console.log(this.dataPost);
} catch(err) {
console.log(err);
}
}
}
kann ich nicht bekommen this.dataPost async. Wenn ich ohne ngOnChanges console.log (this.dataPost) angerufen habe, dann passiere einen Fehler. Ich habe dieses Problem ein wenig gelöst. Ich benutzte ngOnChanges, aber in der Konsole zeigte 2 Nachrichten. Eine Nachricht mit einem anderen Fehler mit einem tollen Ergebnis.
Wie ich verstehe, ist es passiert, weil ngOnChanges Lifecycle ist und vor ngOnInit aufgerufen wird und immer dann, wenn sich eine oder mehrere datengebundene Eingabeeigenschaften ändern. Ich möchte nicht, dass es zweimal aufgerufen wird.
Wie bekomme ich ein Datum vom Server in einer Kindkomponente @Input?
Es tut mir leid für die Grammatik. Ich werde froh sein, dass sich jeder löst.
Vielen Dank für Ihre Zeit. Ich habe versucht, so zu tun, aber schlecht. Ich habe 'ngOnChanges' entfernt und' console.log (this.dataPost) 'im Konstruktor ausgeführt, aber ein schlechtes Ergebnis' undefined'. Ich denke, es wird nicht asynchron. Kannst du helfen, wie es zu lösen ist? – Lestoroer
Auch 'dataPost $: any;' kann dieses Problem nicht lösen. Wenn ich etwas vom Server bekomme und show in'ngAfterViewInit() { console.log (this.dataPost); } 'dann geben Sie ein Ergebnis wie dieses 'null' zurück. – Lestoroer
Wie sieht 'urlService.getData' aus? Der Wert ist noch nicht in 'ngAfterViewInit' verfügbar. Wenn 'urlService.getData' einen Aufruf an den Server macht, dauert dies eine Ewigkeit im Vergleich zu Code, der nur im Browser ausgeführt wird. Sie müssen alle Async-Aufrufe mit '.then (...)' für Versprechungen oder Operatoren wie '.map()', '.do()', '.subscribe (...)' für Observables verketten. Wenn 'ngAfterViewInit' ausgeführt wird, wird der Aufruf an den Server wahrscheinlich noch nicht gesendet. –