Angular2ゾーン内のプロファイルビューを更新するHTTPリクエストをどのように実行できるのでしょうか。この要求が非同期であるため、Angular2でNgZone内でHTTPリクエストを実行
がexport class ProfileComponent implements OnInit {
constructor(
private auth: Auth,
private authHttp: AuthHttp) {}
ngOnInit() {
// update profile information
let headers: any = {
'Accept': 'application/json',
'Content-Type': 'application/json'
};
this.authHttp
.get('https://' + myConfig.domain + '/api/v2/users/' + this.auth.userProfile.user_id, {headers: headers})
.map(response => response.json())
.subscribe(
response => {
this.auth.userProfile = response;
localStorage.setItem('profile', JSON.stringify(response));
},
error => console.log(error.json().message)
);
}
}
問題は、プロフィールページのロードがが前にこの要求が満たされていることと、プロファイル:私のトップレベル・プロファイル・コンポーネントでは、私は現在、authHttp
を使用して、単一の単純なHTTPリクエストをやっています更新されます。何も起こらないのは、古いデータがプロファイルに読み込まれ、新しいデータが後で読み込まれるため、何も起こりません。次に、最後のリクエストからロードされた新しいデータを使用するだけなので、2回目のリフレッシュはすべて機能します。
この問題はNgZone
を使用して解決できますか?どういうわけかこの要求をゾーンに含めることができますか?終了したらコンポーネントツリーを再評価できますか?
私はまだこれで少し混乱しています。何が更新されていませんか?あなたのビュー?ビューのauth.userProfileにバインドしていますか? authHttpによるリクエストが戻ったときに更新されませんか? – Steveadoo
@Steveadoo 'auth.userProfile'からのデータのいくつかを入力としてプロファイルコンポーネントのテンプレート内の別のコンポーネントに渡していますので、' auth.userProfile'を更新する前に古いデータを入力として渡しています。 httpリクエスト –
あなたはそれがゾーンの問題であることをどのように知っていますか? AuthHttpを見ると、angleのゾーンの外側で動くようには見えません。 Auth.userProfileを@Input()プロパティとして他のコンポーネントに渡すと、変更時に自動的に更新されます。この他のコンポーネントのngOnInitの@Inputプロパティを読んでいますか? – Steveadoo