異なるコンポーネントで呼び出されたオブザーバに登録する際に問題が発生しています。他のコンポーネントまたはサービスとのオブザーバを共有する
My Angular 4アプリには、ユーザー情報の一部を含むナビゲーションバーがあります。ユーザー情報は、ログイン時にサーバーへのhttp要求から取得されます。これはLoginServiceで管理されます。ログアウト時に、ユーザーをnullに設定しました。
logIn() {
return this.http
.get(this.apiUrl)
.map(response => response.json())
}
logOut() {
return Observable.of(null)
}
ログインコンポーネントから、サービスを使用してユーザーの詳細を取得するのはかなり簡単です。
logIn() {
this.loginService.logIn().subscribe((user) => {
console.log('Logged in')
this.user = user
console.log(this.user)
)
}
しかし、別のコンポーネントから取得して、navbarに値を設定する必要があります。 Navbarコンポーネントを使用してLoginServiceのlogIn()およびlogOut()関数を登録し、これらのオブザーバブルをマージし、いずれかのイベントがトリガされた場合はそのユーザを更新する必要があると思います。しかし、私はそれらを購読することはできませんし、2日後に私はまだこれに固執しています。
I've made a plunk to show the problem。ログインボタンをクリックすると、app.componentのユーザーを設定する必要があります。ログアウトボタンをクリックすると、設定を解除する必要があります。
我々はサービスがの観測可能に公開したパターンを使用していた
は、あなたが更新されplnkrを参照してください。現在の状態とその状態を更新するいくつかの方法については、http://blog.jonrshar.pe/2017/Apr/09/async-angular-data.htmlを参照してください。私は関連する質問に関するテクニックを示す答えも書いています:https://stackoverflow.com/a/41554338/3001761 – jonrsharpe