Angular有时会向api发出一个请求?

时间:2018-08-29 00:41:33

标签: angular api caching request

我有棱角指示和服务。该指令显示或隐藏组件中的元素-取决于api答案。如果用户对某个元素具有权限,则它允许显示该内容,即以另一种方式隐藏该元素。但是我想每10分钟只发出一次此类请求,然后存储答案,而对于另一个元素使用缓存的信息?我该如何实现?

2 个答案:

答案 0 :(得分:0)

一种方法是创建一个代表这些组件发出请求的服务。在该服务中,您可以使用BehaviorSubject。

@Injectable()
export class MyService {
  showItem: BehaviorSubject<boolean> = new BehaviorSubject(true);

  constructor(private http: Http){
     setInterval(() => this.myRequest(), 1000000)
  }

  myRequest(){
    this.http.get('enpoint')
      .subscribe(data => this.showItem.next(/* resolve data to true or false*/))
  }
}

然后在组件中注入此服务,然后可以订阅行为主题

@Component({
   template: `<my-component *ngIf="myService.showItem | async"></my-component>`
})
export class AComponent {
  constructor(public myService: MyService){ }
}

您的任何组件现在都可以像这样

进行订阅

答案 1 :(得分:0)

您可以在可观察对象上使用shareReplay运算符。它将从可观察对象中重播最后X个项目,并且有一个时间参数,用于确定应将值缓存多长时间。