我有棱角指示和服务。该指令显示或隐藏组件中的元素-取决于api答案。如果用户对某个元素具有权限,则它允许显示该内容,即以另一种方式隐藏该元素。但是我想每10分钟只发出一次此类请求,然后存储答案,而对于另一个元素使用缓存的信息?我该如何实现?
答案 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个项目,并且有一个时间参数,用于确定应将值缓存多长时间。