ngOnDestroy에서 구독 취소 이외의 구성 요소에서 behaviorSubject에 대한 중복 구독을 방지 할 수있는 방법이 있습니까? 지금까지는 observable에 대한 subscription을 작성한 구성 요소를 앞뒤로 탐색 할 때 중복 구독을 피하기 위해 찾은 유일한 방법입니다.구성 요소에 각도 2 중복 구독
예 :
사용자 서비스
@Injectable()
export class UserService {
constructor(private http: Http) {
this.setCurrentUser();
}
private currentUser$ = new BehaviorSubject<User>(null);
public getCurrentUser(): Observable<User> {
return this.currentUser$.asObservable();
}
public setCurrentUser(): void {
this.getLoggedUser(); //
}
private getLoggedUser(): void {
let getCurrentUserUrl = 'http://127.0.0.1:8000/users/current/'
let headers = new Headers({
'Content-Type': 'application/json'
});
let options = new RequestOptions({
headers: headers
});
options.withCredentials = true;
this.http.get(getCurrentUserUrl, options)
.map(this.toUser)
.catch(this.handleError)
.subscribe(
user => this.currentUser$.next(user),
error => console.log("Error subscribing to currentUser: " + error)
);
}
private toUser(res: Response): User {
let body = res.json();
return body || { };
}
}
그리고 사용자 서비스에서 관찰에 가입 구성 요소 ...
export class AppComponent implements OnInit, OnDestroy {
currentUserSubscription:any;
constructor(
private userService:UserService,
private authentificationService:AuthenticationService
) {}
user:User;
ngOnInit() {
this.currentUserSubscription = this.userService.getCurrentUser().subscribe(
data => {
this.user = data;
console.log('Main : ', this.user);
}
);
}
ngOnDestroy() {
// I want to avoid writing this for every subscription
this.currentUserSubscription.unsubscribe();
}
}
내가 구성 요소에 대해 여러 개의 시간을 이동하는 경우, 그것은 여러 번 생성되고 파괴됩니다. 구독은 구성 요소 초기화시마다 만들어 지므로 구성 요소로 삭제해야합니다. 그렇지 않은 경우 다음 구성 요소 초기화시 복제됩니다 ...
ngOnDestroy에서 구독을 삭제하는 방법이 있습니까?
고맙습니다! "파괴 될 때까지"해결책은 제가 찾고있는 해결책이었습니다. 주제가 선언되고 초기화 된 방법에 대해 약간 조정해야했지만 작동합니다. 스마트 및 프레젠테이션 구성 요소 개념을 살펴 보겠습니다. –
'다음'및 '탈퇴'해서는 안됩니다. 대신 간단히 :'complete' :) – Maxime