如何在Angular和Rxjs中只调用一次ajax?

蒋建雨*_*蒋建雨 1 rxjs angular

有代码:

<button (click)="getData()">click<button>

getData(){
  this.http.get('/data.json').subscribe(data => consloe.log(data));
}
Run Code Online (Sandbox Code Playgroud)

或使用帖子

 <button (click)="setData(data)">click<button>
    getData(){
      this.http.post('/data',{data}).subscribe(res =>consloe.log(res));
    }
Run Code Online (Sandbox Code Playgroud)

当我连续多次点击按钮时,它会发送很多时间的http请求.我怎么避免它?

siv*_*636 5

获取数据一次,例如在ngOnInit()方法中,并shareReplay(1)缓存结果.

ngOnInit(){
this.myData =  this.http.get('/data.json').shareReplay(1);
}
Run Code Online (Sandbox Code Playgroud)

现在在您的按钮操作方法中订阅结果observable:

 getData(){
     this.myData.subscribe(data => consloe.log(data));
    }
Run Code Online (Sandbox Code Playgroud)

无论您单击按钮多少次,上述技术都只会连接一次服务器.