javascript - 如何停止 Angular 重复的 api 调用

标签 javascript angular typescript

单击 minister 路由器链接时,我有一个非常简单的 API 调用。它在部长页面打开时显示一些数据。但是我看到每当我从主页或任何其他页面返回该页面时,API 都会再次加载。

duplicate api calls

minister.component.ts

import { Component, OnInit } from '@angular/core';
import { ApiReadService } from "../apiReadService.service";

interface mydata{
  allMinisters: Object
}

@Component({
  selector: 'app-ministers',
  templateUrl: './ministers.component.html',
  styleUrls: ['./ministers.component.scss']
})
export class MinistersComponent implements OnInit {

  allData:Object = [];

  constructor(private apiRead: ApiReadService) {

  }
  ngOnInit(){
  this.apiRead.getData().subscribe(data=>{
            this.allData  = data.allMinisters;
    }); 
  }
}

apiReadSerivce.service.ts

import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/Http';

@Injectable({
  providedIn: 'root'
})

export class ApiReadService {
    constructor(private http: HttpClient) { }

    getData(){
        return this.http.get('http://localhost:8081/allMinisters')
    }
}

最佳答案

最简单的方法 - 如果您只希望数据加载一次是这样的:

import { shareReplay } from 'rxjs/operators';

export class ApiReadService {
   constructor(private http: HttpClient) { }

   ministers$ = this.http.get('http://localhost:8081/allMinisters')
                         .pipe(shareReplay(1))

   getData() {
      return this.ministers$;
   }
} 

一旦返回结果,它就会被 shareReplay(1)“缓存”,并且每次都返回相同的值。

关于javascript - 如何停止 Angular 重复的 api 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53984270/

相关文章:

angular - 将自定义指令动态添加到组件中的 ng-template

angular - 将 Angular 2 应用程序变成移动应用程序

javascript - 如何将选择下拉列表附加到 HTML 数据表?

javascript - 通过索引删除数组对象

javascript - 将对象数组转换为包含对象的数组的最佳方法

typescript - 使用没有 DOM 类型的 TypeScript(用于节点)

javascript - 在 React-router Link 中将对象作为 prop 传递

typescript - 在 typescript 中推断嵌套的泛型类型?

javascript - 我的 ng-repeat 出了问题

javascript - 无法使用 "-"破折号访问 JSON 属性