Angular 2アプリケーション用のログインサービス(AuthService
)を作成しようとしていますが、私は期待していないことを続けています。私が達成しようとしているのは、ログイン後にアプリケーションのどこでも使用される単一のユーザーオブジェクトを持つことです。ユーザがログアウトしてログインした場合、ユーザはngOnInit
機能で他のコンポーネントをフェッチして変更する必要があります。Angular2、コンポーネント間でサービス結果を永続化する
class Service {
private user: User;
constructor(private http: Http) {
}
login(user, pass) {
//login stuff, set this.user;
}
getUser() {
return this.user
}
}
私は、ブートストラップ、私はその後、いくつかのコンポーネントでそれを使用
const SERVICE_PROVIDERS = [
AuthService
]
@NgModule({
bootstrap: [App],
providers: [
SERVICE_PROVIDERS
]
})
で、一度サービスを宣言します。ルートの周りの警備員、基本的なユーザーの詳細の表示、またはログインした人の名前をどこかに表示するようなものを考えてください。使い方は次のようにその後、次のとおりです。
export class Login {
user: User;
constructor(private router: Router, private authService: AuthService) {
}
ngOnInit() {
this.user = this.auth.getUser();
}
}
この方法AuthService
は、すべてのコンポーネントに一度インスタンス化されます。このようにして、ユーザはログアウトしてに戻るときにはを変更しません。だから、私はLogin
コンポーネントのサービスオブジェクトでユーザー変数が変更されたことを知っていますが、ngOnInit
はそこをナビゲートするときに古いユーザーオブジェクトを引き出します。私のルートの周りの警備員も古いユーザーを使用します。すべてのコンポーネントは、それら全てがuser
の独自のインスタンスを持っていることを意味サービス、のそれ自身のインスタンスを持っているように見えます
編集 。ログインしたユーザーが必要なたびにデータベースに戻ってはいけません。
'Subject 'はネイティブオブジェクトですか? – choz
件名は ''rxjs/Rx''からインポートされます。これはよりクリーンな方法ですが、私の問題は、すべてのコンポーネントが 'Service'という独自のインスタンスを持っているということです。つまり、すべてが異なる' user'オブジェクトを持っています。 – Jorg
@Jorgさまざまなコンポーネントに異なるサービスを使用するポイントは何ですか?これは意図的なものなのでしょうか、修正する方法がわからないだけなのでしょうか?後者の場合、 '@ NgModule'に"アプリケーション "プロバイダを宣言しないでください。これは場合によっては複数のインスタンスにつながる可能性があります。代わりに、モジュールに静的な 'forRoot'を実装する必要があります。 [こちらをご覧ください](https://angular.io/docs/ts/latest/guide/ngmodule.html#!#core-for-root) –