Angular2 订阅嵌套
问题是这样出现的: 从博客列表进入博客详情的时候, 从url中解析id, 然后根据id获得博客全部信息.
虽然能成功获取到博客, 但是chrome console里会报错, 说Cannot read property 'title' of undefined
. 感觉是因为订阅嵌套的原因, 但是不知道应该用什么方式来实现从url获取id然后根据id获取博客本身.
试着并列两个订阅, 一样能运行但是也报错.
// blog-full.component.ts
ngOnInit() {
this.route.params
.subscribe( // 订阅'@angular/route'里的Router的params获取id
(params: Params) => {
this.id = params['id'];
this.blService.getBlog(this.id)
.subscribe( // 订阅blogService里的getBlog获取博客本身
(blog:Blog) => {
this.blog = blog;
console.warn(this.blog);
});
});
}
// blogs.service.ts
getBlog(id: number){
return this.http.get('https://xxx.example.com/blogs/'+id)
.map((response:Response) => {
return response.json().obj;
})
.catch((error:Response) => {
return Observable.throw("error when get one blog");
});
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
订阅嵌套不是很优雅,使用rxjs中的mergeMap可以解决你的问题。
具体见:使用rxjs处理多个网络请求
用mergeMap看起来才是正确的方式, 之前嵌套虽然能工作, 但总觉着不是这样的.
另外console里报错的解决方式是将
{{blog.content}}
加个问号{{blog?.content}}