我有一个对话框,在我订阅的组件中打开并包含一个组件....关闭时我想取消订阅..
private deviceObserver: Observable<BreakpointState> = this.breakpointObserver.observe([Breakpoints.XSmall]);
this.deviceObserver.subscribe(result => {
if (result.matches) {
this.deviceType = 'mobile';
} else {
this.deviceType = 'desktop';
}
});
ngOnDestroy() {
this.deviceObserver.unsubscribe();
}
这给了我这个错误:
财产&#39;取消订阅&#39;类型&#39; Observable&#39;中不存在。你是说&#39;订阅&#39;?
答案 0 :(得分:1)
您只能在unsubscribe
上使用Subscription
。您正试图在Observable
上使用它。
如果使用async
管道在组件内部使用observable,则无需取消订阅。这是由框架自动完成的。
如果您在component.ts
中使用它,那么一种方法就是这样做。还有其他选项,例如使用takeUntil
管道:
private deviceObserver: Observable<BreakpointState> =
this.breakpointObserver.observe([Breakpoints.XSmall]);
ngOnInit() {
this.sub = this.deviceObserver.subscribe(result => {
if (result.matches) {
this.deviceType = 'mobile';
} else {
this.deviceType = 'desktop';
}
});
}
ngOnDestroy() {
this.sub.unsubscribe();
}
答案 1 :(得分:0)
出于某种原因,在ngOnDestroy中取消订阅打破了应用程序...这就是我解决它的方式:
private deviceObserver: Observable<BreakpointState> = this.breakpointObserver.observe([Breakpoints.XSmall]);
private breakpointObserverSubscription: Subscription;
// in ngOnInit()
this.breakpointObserverSubscription = this.deviceObserver.subscribe(result => {
if (result.matches) {
this.deviceType = 'mobile';
} else {
this.deviceType = 'desktop';
}
});
public closeSearch() {
this.onClose.apply();
this.breakpointObserverSubscription.unsubscribe();
}