在这样的模板中使用异步管道时,是否可以重新发送HttpRequest?
myObservable$ = this.http.get('api');
<div *ngFor='let item of myObservable$ | async'>{{item}}</div>
答案 0 :(得分:2)
使用async
管道是处理Observables的一种非常方便的方法,因为它可以为您管理退订。这意味着,如果myObservable$
引用发生更改,将触发ChangeDetection,并且async
将取消订阅当前订阅并订阅另一个订阅。因此,您只需重新分配新值myObservable$
,HttpRequest
就会再次发送。
自己测试一下:
ngOnInit() {
setTimeout(() => this.myObservable$ = this.http.get('another-endpoint'), 2000)
}
答案 1 :(得分:1)
您需要向Observable
发出新值,如果您需要按特定事件重新获取数据,则可以将事件放入Observable
并使用switchMap
进行触发器提取:
event$ = new BehaviorSubject(true);
myObservable$ = this.event$.pipe(
switchMapTo(this.http.get('api'))
);
refetchData() {
this.event$.next();
}
答案 2 :(得分:0)
这不是最佳实践。异步管道旨在与流一起使用,将其与触发器可观察对象(例如http调用)一起使用可能会产生有害的副作用。我建议将http调用放在服务中,然后订阅您的组件。如果有特定的原因想要使用异步管道,我建议您使用一个单独的BehaviorSubject并执行类似的操作。...
df <- read.table(
header = T,
stringsAsFactors = F, sep = "|",
text = "Datetime | Group | Value
2019-01-01 00:00:00 | 1 | 5
2019-01-01 00:00:00 | 2 | 4
2019-01-01 00:00:00 | 3 | 2
2019-01-01 00:01:00 | 1 | 1
2019-01-01 00:02:00 | 1 | 2
2019-01-01 00:02:00 | 2 | 2
2019-01-01 00:02:00 | 3 | 1
2019-01-01 00:03:00 | 1 | 1
2019-01-01 00:03:00 | 2 | 2
2019-01-01 00:04:00 | 1 | 1"
)
df$Datetime = lubridate::ymd_hms(df$Datetime)
然后,您可以在组件中每次想要进行http调用时都订阅此内容,在html模板中,可以使用异步管道订阅myBehaviorSubject $。