2017-10-12 8 views
0

私は"< app-navbar >"ブラケットを使ってアプリケーションに注入するnavbarコンポーネントを持っているので、ルート変更があっても常にロードされます。角度4 | "通知する"コンポーネントを実行する

私は、ユーザーがバックエンドサーバーからフロントエンドサーバーにリダイレクトされるログインシステムをいくつかのURLパラメーターとともに使用しています。コンポーネント(localhost:4200/auth/steam)は、これらのパラメータを自分のローカルストレージに保存して、成功するとユーザをフロントエンドホームページ(localhost:4200/)にリダイレクトします。ユーザーがログインしたので、自分のユーザー名をナビゲーションバーに表示します。

問題は、ローカルストレージからユーザー名を取得して表示できるようにするために、ナビゲーションバーコンポーネントに「通知」する方法の手がかりがないことです。

これを行ううまい方法は何ですか?

ところで申し訳ありませんが、この質問が理解しにくい場合は、私はそれをよりうまく説明する方法がわかりません。

BTW2:これはむしろ一般的な質問なので、コード例が必要ではないと思います。以下にコメントが必要な場合

+0

https://angular.io/guide/component-interaction#component-interaction最初にそれを読んでから具体的な問題に戻ってください。 –

+0

ローカルストレージ変数のオブザーバブルを作成してナビバーでサブスクライブすることはできません。値が取得されると直ちにUIに表示されます。 – JayDeeEss

+0

@ Jota.Toledo私はすでに行っていますが、ドキュメントでは親と子のコミュニケーションについてしか話しません。私のコンポーネントは互いに関係していません。 –

答えて

3

私はObservableを使用し、ユーザサービスへのアップデートがある場合にはナビゲーションバーに通知します。

@Injectable() 
export class UserService { 
    private user: ReplaySubject<UserAuthorizations> = new ReplaySubject<UserAuthorizations>(); 
    get user() { 
    return this._user.asObservable(); 
    } 


    constructor() { 
    } 

    getCurrentUser(username?: string, password?: string): Observable<UserAuthorizations> { 
     this.user.next('=>'+username+'-'+password); 
    }); 
    } 

} 

変数

ユーザーオブジェクトへの変更があったときに、ユーザーサービスがイベントを放出する/今、あなたはあなたのサービスで/発光ユーザーを注入しているとして、あなたはNAV-バーでcomponentを、 subscribeユーザ変数に変更され、ユーザオブジェクトに変更があったときに更新されます。

export class myComponent { 

    constructor(private userService: UserService) { 
    userService.user.subscribe((usr) => { 
     this.userdisplay = user.name; 
    }); 
    } 

} 

公式角度のドキュメント:https://angular.io/guide/component-interaction#component-interaction

+0

ありがとう、これは非常に明確になった! –

0

、他のユーザーが投稿したとして、あなたは対象と観測可能な組み合わせを使用することができます。

<nav-bar>コンポーネントをアプリにグローバルに追加する代わりに、 コンポーネントを個別のルートに追加することができます。<nav-bar>

このようにして、<nav-bar>コンポーネントがルート変更で破棄され、再び初期化されます。 initでローカルストレージからユーザー名を取得し、補間を使用して設定できます。

+0

件名と観測可能なメソッドが既にうまく動作しているので、グローバルになっているnavbarに固執します:) –

+0

これは素晴らしいことです。observableを使用してポイントをもう1つ追加したいだけです。コンポーネントの破棄時にサブスクリプションの購読を解除することを忘れないでください。そうしないと、メモリリークが発生する可能性があります。 – gkrthk

+0

おっと、完全に忘れてしまった。思い出してくれてありがとう –

関連する問題