【发布时间】:2018-05-31 06:49:27
【问题描述】:
我正在尝试使用 observables,但我收到一条错误消息,提示“无法读取属性 'unsubscribe' of null”。我想知道我应该在哪里调用我的取消订阅方法。我也想知道我的可观察设置是否错误。我有一个服务、一个组件和一个看起来像这样的 HTML 模板:
// *** Service ***
private elements : Map<Category, string[]> = new Map<Category, string[]>();
// I want to populate the map when the service is constructed
constructor(private httpClient : HttpClient){
for (enum in Category){
if (!isNaN(enum as any)){
this.httpClient.get<string[]>(someUrl + enum).subscibe(data => {
this.elements.set(category, data);
});
}
}
}
getElements(category: Category) : Observable<string[]> {
return Observable.create(this.elements.get(category));
}
.
.
.
// *** The component ***
getCategoryList(category : Category) : Observable<string[]> {
this.categoryService.getElements(category);
}
.
.
.
// *** The template ****
<div *ngFor="let element of getCategoryList('WARM_ELEMENTS') | async ">
<div class="row">
{{element}}
</div>
</div>
我想我在某个地方需要一个取消订阅方法,或者 / 并且我的可观察设置有问题(我现在正在学习 Angular)。
【问题讨论】:
-
通常你在
ngOnDestroy生命周期钩子中取消订阅 Observable。 angular.io/api/core/OnDestroy -
所以我可以在组件的 ngOnDestroy 挂钩中取消订阅?我不明白在这种情况下如何退订?
-
.subscibe?这段代码甚至无法编译。请发布实际的编译代码,以及您得到的确切和完整的错误。但是为什么你将一个字符串数组包装到一个 Observable 中?重点是什么?为什么不直接返回字符串数组呢?你知道 Observable.create() 是一个函数,而不是一个字符串数组吗?同样,这不会编译。