Observable使用场景的一个问题
环境:Angular2+
现在有一个组件内部
class Demo01 {
data$: Observable<string[]>;
constructor(private service: MyService) {
}
OnInit() {
this.data$ = this.service.getData();
}
submit() {
// 在这里我需要拿到this.data$中的数据去做一些处理
// 如果直接对this.data$进行订阅的话,就会进入MyService中的getData()方法重新获取一次数据,但是我不想这样
// **目前我的办法是,看下面的ts**
}
}
Service:
class MyService {
getData(): Observable<string[]> {
return of(['1', '2', '3', '4']) // 这里有可能是个http请求
}
}
模板:
<ul>
<li *ngFor="let item of data$ | async">{{item}}</li>
</ul>
<button (click)="submit()">Submit</button>
我的解决办法是:
class Demo01 {
data$: Observable<string[]>;
data: string[]
constructor(private service: MyService) {
}
OnInit() {
this.data$ = this.service.getData().pipe(
// 使用tap操作符监控this.data$, 将其中的数据缓存一份到this.data
tap(data => {
this.data = data;
})
);
}
submit() {
// 在这里使用this.data
}
}
不知道是否还有其他的操作能够解决这种场景呢?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
找到答案了,使用 sharedReplay 操作符
参考
我理解问题是,一个请求完成后,多处调用时不想再次请求。。
如果我理解正确的话,那存在service中,多处注入该service就好了。。何必这么麻烦。。service层本身存在就是为了数据通信的。。