変更された@Inputは、親コンポーネントのhttpリクエストで更新された後、子コンポーネントで表示されないようです。子供が親を呼び出すと子コンポーネントの親変数を更新する方法httpリクエストを持つ
これは一例です:
親だから、
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')
);
}
}
子供
@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() {}
}
httpリクエストがない場合、これは動作します。しかし、私は要求があると、子ビューはカウンタを更新しません。
アイデア?私は何が欠けていますか?
public updateCounter() {
let that = this;
this._http.get('/newcounter/').subscribe(
data => {
// update counter
that.a = JSON.parse(data['_body']);
},
error => {},
() => console.log('updated counter')
);
}
でthis
を使用した:私は今持っている
一つのハックは、このようなあなたの親コンポーネントのupdateCounter
機能を改正updateCounter
私の最初の試みだったが、それが機能しなかったこと。そのような1つの状態の後ろに、すべてのボタンがクリックされるたびに前のカウンタが表示されます。 – Brian
updateCounterメソッドを参照としてChildComponentに渡して、更新をトリガーします。ドキュメントによると、あなたのソリューションの代わりにEventEmitterを使用することを提案したいと思います。公式のドキュメントでサンプルを探す:https://angular.io/docs/ts/latest/guide/template-syntax.html#!#inputs-outputs – Matt