1

Also hier ist das Szenario. Ich habe einen Benutzerdienst mit einem BehaviorSubject und einer Methode, die eine Observable dieses BehaviorSubject zurückgibt. Meine zweite Datei ist die Header-Komponente, die das Observable abonniert. Die Frage ist .. Ist es möglich, nur Änderungen zu abonnieren oder muss ich etwas Logik vor der this.userSubject.next(this.user) haben?Angular 2+ abonnieren beobachtbar nur bei Änderung

Denn hier Bezug ist der Code:

// 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); 
    }); 
} 

Und hier

// 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); 
    }); 
} 

Antwort

3

Sie distinctUntilChanged Operator verwenden können (documentation):

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

Dies sollte jeder emittierten Wert filtern Vergleiche es mit dem vorherigen, wenn es anders ist, dann das Subscri ption wird angerufen, sonst nein.

Verwandte Themen