음, Observable을 AuthService
에 노출시킬 수 있습니다. 그러면 HeaderComponent
에서이 스트림을 구독 할 수 있습니다. RxJS Subject 클래스를 확장하는 EventEmitter
클래스를 사용할 수 있습니다. 또한 TypeScript 설정기를 사용하여 변경 사항에 대한 이벤트를 자동으로 트리거 할 수 있습니다.
@Injectable()
export class AuthService {
private _user: any;
userStream: EventEmitter<any>;
constructor() {
this.userStream = new EventEmitter();
}
//code ...
getUserData() {
//call our setter
this.user = newData;
}
set user(newValue) {
this._user = newValue;
//set user data and emit a value in the userStream
this.userStream.emit(newValue);
}
}
그런 다음 당신이 당신의 구성 요소 서비스를 사용할 수 있습니다 :
@Component({...})
export class HeaderComponent {
currentUser: any;
constructor(private authService: AuthService) {
//subscribe to the stream to be notified when user data has changed
authService.userStream.subscribe((newUser) => { this.currentUser = newUser; });
}
}
그래서 당신은 당신의 사용자 데이터에 변화를들을 수있을 것 같은 그래서, 당신의 코드가 보일 것입니다.
FYI [이 답변] (http://stackoverflow.com/a/36076701/6680611)은 앵귤러 2'EventEmitter '가 그런 방식으로 사용되어서는 안된다는 것을 제안합니다. 대신 RxJS'Subject '를 사용할 수 있습니다. – cartant