1

그래서 여기 시나리오가 있습니다. BehaviorSubject가있는 사용자 서비스와이 BehaviorSubject의 관찰 가능을 반환하는 메서드가 있습니다. 내 두 번째 파일은 관찰 가능 항목을 구독하는 헤더 구성 요소입니다. 질문은 .. 변경에 대해서만 구독 할 수 있습니까? 아니면 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); 
    }); 
} 

이것은하여 각 발광 값을 필터링한다 여기에 참고로

는 코드 이전의 것과 비교하여, 다른 경우에는 subscri ption이 호출되고, 그렇지 않으면 no가 호출됩니다.

관련 문제