2017-05-18 17 views
1

これはシナリオです。私は、BehaviorSubjectを持つユーザサービスと、このBehaviorSubjectのオブザーバブルを返すメソッドを持っています。私の2番目のファイルは、オブザーバブルを購読するヘッダコンポーネントです。 質問は..変更にのみ購読することができますか?またはthis.userSubject.next(this.user)の前にロジックが必要ですか?ここで角2+は変更時にのみ観察可能に購読する

// header.component.ts 
ngOnInit() { 
    this.userService.keepUpdated(); 
    this.userService.userStream() 
    .subscribe(user => { 
     // Here is the problem. This console.log gets called everytime userSubject.next(this.user) send something. I would like it only only to be called if the user is different from the previous one. 
     console.log(user); 
    }); 
} 

答えて

3

// user.service.ts 
user: User; 
private userSubject = new BehaviorSubject<User>(new User({})); 

keepUpdated =() => { 
    this.tokenService.tokenStream() 
    .subscribe(token => { 
     this.user.update(token); 
     this.userSubject.next(this.user); 
    }); 
} 

あなたがdistinctUntilChanged演算子を使用することができ(documentation):

ngOnInit() { 
    this.userService.keepUpdated(); 
    this.userService.userStream() 
    .distinctUntilChanged() 
    .subscribe(user => { 
     console.log(user); 
    }); 
} 

これは、によってそれぞれ放出された値をフィルタ処理する必要があり、ここで参考のため

コードでありますそれを以前のものと比較し、それが異なる場合は、サブスリptionが呼び出され、そうでなければnoが呼び出されます。

関連する問題