【发布时间】:2017-02-16 14:37:10
【问题描述】:
我正在寻找一种在observable stream 上使用loading bar component 的方法?
我有一个component,它使用async pipe 显示来自observable 的数据。这个 Observable 还可以操作数据,例如使用 map。
目前我在组件中有这个:
this.listData$ = this.http.get('/itemList')
.map(data => this.manipulate(data))
在模板中:
{{listData$ | async}}
服务器可以将数据返回为empty []、'unavailable' 或array 的项目。
如何接入流并提供加载组件,该组件在加载数据时会显示加载栏,并在为空或不可用时显示错误消息?类似的东西......
this.listData$ = this.http.get('/itemList')
//.something here??
.map(data => this.manipulate(data))
<loading-bar [data]='listData$' [noDataMsg]='"no data"' [errorMsg]='unavailable'>
{{listData$ | async}}
</loading-bar>
理想情况下,我想继续使用async pipe,而不是订阅我的组件。但是,将 Observable 传递给 loading-bar 组件并在那里订阅,这使得2 http calls...然后我需要在 Observable 上使用 .share()...
你们用什么方法来显示加载、没有数据和错误消息的流?
【问题讨论】:
-
实际上你可以使用一些
loading标志并在http之前设置为true,如果你想避免订阅,在map内部设置为false。所以你的加载可以监听loading变量状态 -
你可以使用
do操作符,它允许你在不使用map的情况下添加操作,比如this.http.get(...).do(loading = false).map(... => ...);
标签: angular