hat angerufen hat anscheinend kann ich nicht geändert @Input in der untergeordneten Komponente zu sehen, nachdem es in den Eltern http Anfrage aktualisiert wurde. DieseWie Eltern Variable in geordnete Komponente zu aktualisieren, nachdem Kind Eltern-Funktion, die HTTP-Anforderung
ist ein Beispiel:
Eltern
import { ChildComp } from './child.component';
@Component({
template: <child [counter]="a" [updateCounter]="updateCounter"></child>,
directives: [ChildComp]
})
export class ParentComponent {
public a = 1;
public CallBack:Function;
constructor(private _http:Http) {}
public ngOnInit() {
this.CallBack = this.updateCounter.bind(this);
}
public updateCounter() {
this._http.get('/newcounter/').subscribe(
data => {
// update counter
this.a = JSON.parse(data['_body']);
},
error => {},
() => console.log('updated counter')
);
}
}
Kind
@Component({
selector: 'child',
template: `
<button class="btn btn-default" (click)="updateCounter()"></button>
<p>counter: {{ counter }}</p>
`,
inputs: ["counter", "updateCounter"]
})
export class ChildComponent {
public counter;
public updateCounter:Function;
constructor() {}
}
Also, das funktioniert, wenn es nicht HTTP-Anforderung ist. Aber sobald ich die Anfrage habe, wird die untergeordnete Ansicht den Zähler nicht aktualisieren.
Irgendwelche Ideen? Was vermisse ich?
Ein Hack, den ich jetzt habe, ist zu setTimeout
auf untergeordnete Komponente die Zähler 500 ms nach dem Aufruf von updateCounter
, dass mein erster Versuch war, aber es hat nicht funktioniert. Es ist wie ein Zustand dahinter, es zeigt den vorherigen Zähler nach jedem Klick auf die Schaltfläche – Brian
Sie übergeben die updateCounter-Methode als Referenz an Ihre ChildComponent, um das Update auszulösen. Laut den Dokumenten würde ich vorschlagen, dass Sie den EventEmitter anstelle Ihrer Lösung verwenden. Finden Sie ein Beispiel in der offiziellen Dokumentation: https://angular.io/docs/ts/latest/guide/template-syntax.html#!#inputs-outputs – Matt