我一直在尝试使用TypeScript在Angular 2组件中实现新的rxjs Observable
. 我创建了一个服务 MyService
,它在一个方法中返回一个observable,例如,
export class MyService {
getMyObs(){
return new Observable(observer => {
observer.next(42);
});
}
}
然后在我的Angular 2组件中,我在OnInit中订阅了这个observable,例如,
export class MyComponent implements OnInit {
obs: any;
constructor(private myService: MyService){};
ngOnInit {
this.obs = myService.getMyObs().subscribe(data => {
// Do stuff here...
});
}
}
RxJs documentation谈论取消订阅你的observable,以便你的observable知道不再向你的观察者发出消息 . 因此,我认为当我的组件被破坏时,我应该取消订阅observable,例如
export class MyComponent implements OnInit, OnDestroy {
obs: any;
constructor(private myService: MyService){};
ngOnInit {
this.obs = myService.getMyObs().subscribe(data => {
// Do stuff here...
});
}
ngOnDestroy {
this.obs.unsubscribe();
}
}
虽然这对我有意义,但是打字稿编译器会抛出(实际上应用程序抛出),说没有 unsubscribe
方法 . 似乎在类型定义文件中没有描述这样的方法 . 如何使用TypeScript正确取消订阅observable?
3 回答
您需要为您的
Observable
添加取消订阅方法 . ,Disposing Observable Executions您可以在Rxjs模块的
Subscription.d.ts
(类Subscription
)中找到unsubscribe
方法的定义 .事实上,您取消订阅订阅而不是可观察订阅 .
首先创建订阅如下 .
然后分配给observable .