2016-12-19 2 views
1

ログイン後にコンポーネントのプロパティを編集する必要があります。例えば、私はHomeComponentのmessageプロパティとUserComponentのageプロパティを編集する必要があります。したがって、コンポーネントクラスを継承することはオプションではありません。どのように私はこの継承のないコンポーネントのプロパティにアクセスする方法

auth.serviceに

// app/auth.service.ts 

import { Injectable }  from '@angular/core'; 
import { tokenNotExpired } from 'angular2-jwt'; 

declare var Auth0Lock: any; 

@Injectable() 
export class Auth { 
    lock = new Auth0Lock('asdsd', 'mehmetyeneryilmaz.eu.auth0.com', {}); 

    constructor() { 
    this.lock.on("authenticated", (authResult) => { 
     localStorage.setItem('id_token', authResult.idToken); 
    }); 
    } 

    public login() { 
    this.lock.show(); 
    } 

    public authenticated() { 
    return tokenNotExpired(); 
    } 

    public logout() { 
    localStorage.removeItem('id_token'); 
    } 
} 
+0

私は正確にあなたの問題を理解していません。 'HomeComponent'と' UserComponent'はどこですか?この場合、何が最善の解決策であるのか疑問があるなら、サービスを利用してください。関連項目https://angular.io/docs/ts/latest/cookbook/component-communication.html – yurzui

答えて

3
を達成することができます

観測と共有サービスを使用して変更をサブスクライブ:

import { Injectable }  from '@angular/core'; 
import { tokenNotExpired } from 'angular2-jwt'; 

declare var Auth0Lock: any; 

@Injectable() 
export class Auth { 
    lock = new Auth0Lock('asdsd', 'mehmetyeneryilmaz.eu.auth0.com', {}); 

    private message = new BehaviorSubject<string>(null); 
    public $message = this.message.asObservable(); 

    constructor() { 
    this.lock.on("authenticated", (authResult) => { 
     localStorage.setItem('id_token', authResult.idToken); 
    }); 
    } 

    public login() { 
    this.lock.show(); 
    this.message.next('checking authentication'); 
    } 

    public authenticated() { 
    return tokenNotExpired(); 
    } 

    public logout() { 
    localStorage.removeItem('id_token'); 
    this.message.next('successfully logged in'); 
    } 
} 
+0

「rxjs/Rx」から「import {BehaviorSubject、Observable}」を追加しました; top at line [ts]プロパティ 'toObservable'が型 'BehaviorSubject 'に存在しません。あなたはこれをどのように解決するか考えていますか? – TyForHelpDude

+1

申し訳ありませんが、 'asObservable()'だったはずです。https://angular.io/docs/ts/latest/cookbook/component-communication.html#!#bidirectional-serviceもご覧ください。 –

関連する問題