2017-10-10 17 views
-1

これはan earlier question I postedへのフォローアップの質問です。定数はどのように角度2+で保存されますか?

私の質問では、サービス上のメソッドを呼び出すときに奇妙なログ出力が発生しました。 console.log出力では、サービスが明確に定義したデータは印刷されませんでした。サービスメソッドを呼び出すときに使用されるコンテキストは、呼び出しを行うコンポーネントのコンテキストであることが判明しました。

私の質問はです:Angular 2+の複数のコンポーネントに変数を格納する適切な方法は何ですか?

例えば、変数を保持したいとします(isLoggedIn)。この変数はどこで保持しますか?コンポーネントがそのサービスを呼び出すと(つまり、authService.getLoggedInStatus())、サービスのisLoggedInの値がネイティブに取得されるのではなく、コンポーネント内の同じ名前の変数が潜在的に取得されるため、サービスに保持することはできません。

共有変数をどのように角度で記録していますか?

+2

詳しい情報はなぜ「authService.getLoggedInStatusは()」コンポーネントに同じ名前の変数の値を与えるのでしょうか?これは有効な方法です。 @Injectablesはシングルトンであり、値を格納するのに適しています。 – omeralper

+0

私は個人的に、私のプロジェクトの1つで、ログインに必要なすべての 'components'によって呼び出される' Service'に 'BehaviourSubject'を使ってログインしたユーザデータを格納するという、この非常に正確なアプローチを使用しました。それは完璧に正常に動作します。さらに、すべてが1つのサービスに「サブスクライブ」されていれば、それが変更されたときにすべてのコンポーネントがその変更を知っているという利点があります。 I.Eログアウトはすべての「購読者」によって自動的に登録されます –

答えて

0

@注射可能なサービスはシングルトンです。このサービスは、コンポーネントが宣言されている関連モジュールで提供します。このサービスの対象コンポーネントへの依存性注入を介して、公開されているプロパティにアクセスできます。あなたはsingletonサービスが完全に有効であるとして@Injectable serviceに置く、アプリケーション内のどこにでもグローバル変数isLoggedInアクセス可能を維持したい場合はこのように、あなたはこれらのプロパティとその値

0

を共有することができます。あなたは、新しいサービスのインスタンスを初期化し

@Component({ 
    selector: 'app-home', 
    templateUrl: './home.component.html', 
    styleUrls: ['./home.component.scss'], 
    providers: [SingletonService] 
}) 

:必ずそれはあなたもそう経由のコンポーネントでそれを追加する場合にのみapp.modulesなどに

import { BrowserModule } from '@angular/platform-browser'; 
import { NgModule } from '@angular/core'; 
import { SingletonService } from './Singleton.service'; 

@NgModule({ 
declarations: [ 
    AppComponent, 
], 
imports: [ 
    BrowserModule, 
    FormsModule 
], 
providers: [SingletonService], 
bootstrap: [AppComponent] 
}) 
export class AppModule { } 

それを宣言する必要がありシングルトンサービスであることを確認するためにあなたの意図するグローバルisLoggedInは、このコンポーネントに独自のインスタンスを持っています。

これは、@Injectable()を使用してグローバル変数を保存する方法を理解してほしいと考えています。依存性注入here.

関連する問題