我想弄清楚为什么我看到的所有Angular应用程序都将订阅分配给一个变量,只能通过ngOnDestroy()取消订阅。例如:如果您未将其分配给变量,会发生什么情况?
export class ViewBookPageComponent implements OnDestroy {
actionsSubscription: Subscription;
constructor(store: Store<fromRoot.State>, route: ActivatedRoute) {
this.actionsSubscription = route.params
.select<string>('id')
.map(id => new book.SelectAction(id))
.subscribe(store);
}
ngOnDestroy() {
this.actionsSubscription.unsubscribe();
}
}
如果我只是完全删除actionsSubscription,会发生什么?订阅还会被创建但不会被销毁?在下面的情况下,您仍然会产生副作用,但不必麻烦取消订阅。垃圾收集所需的actionsSubscription也是如此?
export class ViewBookPageComponent {
constructor(store: Store<fromRoot.State>, route: ActivatedRoute) {
route.params
.select<string>('id')
.map(id => new book.SelectAction(id))
.subscribe(store);
}
}
感谢您的快速响应!还有一个问题:如果我将.subscribe()放在一起,并且仅仅使用SelectAction副作用保留.map(),那该怎么办?由于没有用户,观察者会不会继续发射,还是会与组件一起死亡? –
从angular.io开始,“subscribe()方法返回一个Subscription,一个Subscription不是另一个Observable,它是Observables的行尾,你不能再调用map()或再次调用subscribe()。订阅对象具有不同的用途,用其主要方法表示,取消订阅。“简而言之,可观察性直到订阅使用订阅()才会开始工作。 – Nehal
明白了。谢谢。 –