2016-10-11 3 views
0

をキャッチしていないサービスである:角度2 - 件名プロパティをサービスへの加入は、ここでのイベント

@Injectable() 
export class AuthService { 

    public reset: Subject<any>; 

    constructor() { 
    this.reset = new Subject(); 
    } 

    public logout() { 
    this.reset.next('logout'); 
    } 
} 

これはログアウト()が発生したときに知りたい、別のサービスである:

@Injectable() 
export class StoreService() { 

    constructor(private auth: AuthService) { 

    this.auth.changes.subscribe((value) => { 
     // Do not work God knows why 
    }); 
    } 
} 

契約で2番目のサービスは決してイベントを取得しません。どうして?

+0

申し訳ありませんが、auth.changesはリセットプロパティーを返すゲッターにすぎません –

+0

「変更」ゲッターの作成方法を示すことができますか? – martin

+0

@Martinはい、もちろん、ここにあります: 'public get changes(){ return this.reset; } ' これも私も試しました: ' public get changes(){ return this.reset.asObservable(); } ' –

答えて

0

あなたが別のサービスまたはコンポーネントにサブスクライブすることができますしている観測文字列を定義する必要があります。

@Injectable() 
export class AuthService { 

    public reset: Subject<any>; 
    /** 
    * Observable string streams 
    */ 
    notifyObservable$ = this.reset.asObservable(); 


    constructor() { 
    this.reset = new Subject(); 
    } 

    public logout() { 
    this.reset.next('logout'); 
    } 
} 

// StorageService

@Injectable() 
export class StoreService() { 

    constructor(private auth: AuthService) { 

    this.auth.notifyObservable$.subscribe((value) => { 
     // Do not work God knows why 
    }); 
    } 
} 
+0

あなたの答えはありがたいですが、SubjectはすでにObservableを返しています。 asObservable()をObservableで使用しますか?とにかく、まだ動作していません –

+0

何かエラーがありますか? – ranakrunal9

+0

あなたの参照のためにあなたは答えを確認することができますhttp://stackoverflow.com/questions/39738974/can-i-emmit-the-event-from-parent-to-child-in-angular2/39739184#39739184 – ranakrunal9

1
@Injectable() 
export class AuthService { 

    public reset: Subject<any>; 
    reset$ = null; 

    constructor() { 
    this.reset = new Subject(); 
    this.reset$ = this.reset.asObservable(); 
    } 

    public logout() { 
    this.reset.next('logout'); 
    } 
} 

そして、他のサービス、それがイベントをサブスクライブがかかります。

+0

これは実際に私が探していたものです。 – Tawani

2

問題が見つかりました - AuthServiceの複数のインスタンスがありました(ありがとう@Martin)。問題は、誰かが[AnyService]を任意のコンポーネントに追加した場合、エラーは発生しませんが、2つ(またはそれ以上)のサービスインスタンスを取得することになります。 この種のバグはサービスコンストラクタにconsole.log(counter++)を追加すると簡単に見つかります。