我正在尝试将switchMap
与模板async
管道结合使用,因此我认为我需要返回Observable
。但这不起作用。
this.route.params.switchMap( (params: Params) =>
this.course = this.courseService.get(params['id'])
);
我在模板中想到了
<div *ngif="course | async as c">
{{c.name}}
</div>
应订阅此observable并触发对服务器的请求,但似乎没有。我在这里误解了什么?对ngFor
数组Observable
采用相同的方法。
解决了这个问题,(仍然混淆了switchMap在这里所做的事情,我从某个地方偷了它):
this.route.params.subscribe( params => this.course = this.courseService.get(params['id']));
任何人都可以解释,为什么switchMap在这种情况下不起作用。
在我的其他项目中,这有效:
this.route.params
.switchMap((params: Params) =>
this.journalService.getJournal(+params['id']))
.subscribe( (journal) => {
this.journal = journal;
});
答案 0 :(得分:1)
问题来自switchMap
。
switchMap
期望收到一个可观察但是你没有返回一个可观察的:this.course = this.courseService.get(params['id'])
。
您可以尝试这样做:
this.course$ = this.route.params
.map(params => params['id'])
.switchMap(id => this.courseService.get(id));
和
<div *ngIf="course$ | async as c">
{{c.name}}
</div>
答案 1 :(得分:0)
这是blog对您有帮助。根据这篇博客:
可观察物是热的还是冷的
如果这个普通的Observable没有订阅者,它就不会被触发! 据说observable很冷,因为如果不存在订阅,它就不会生成新的值。
switchMap
是一个运算符,应该用于转换来自流的数据。您可以在official site上学习所有rxjs概念。
运算符:是纯函数,它支持使用map,filter,concat,flatMap等操作处理集合的函数式编程风格。
希望能有所帮助。