Angular сделать один запрос к API за какое-то время? - PullRequest
0 голосов
/ 29 августа 2018

У меня угловая директива и услуги. Эта директива показывает или скрывает элементы от компонента - зависит от ответа API. Если у пользователя есть разрешение на какой-либо элемент, это позволяет показать это, иначе он скрывает элемент. Но я хочу сделать этот тип запроса только один раз в 10 минут, затем сохранить ответ и для другого элемента использовать кэшированную информацию? Как мне этого добиться?

Ответы [ 2 ]

0 голосов
/ 29 августа 2018

Вы можете использовать оператор shareReplay для наблюдаемой. Он будет воспроизводить последнее число X элементов из наблюдаемой, и есть параметр времени для того, как долго он должен кэшировать значения.

0 голосов
/ 29 августа 2018

Одним из способов является создание службы, которая делает запрос от имени этих компонентов. В сервисе вы можете использовать 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){ }
}

любой из ваших компонентов теперь может подписываться следующим образом

...