如何使用 setTimeout for *ngIf in angular 10 for the ionic spinner

How use setTimeout for *ngIf in angular 10 for the ionic spinner

如果应用程序仍在从服务器加载数据,我会在加载 2 秒后显示一个离子加载指示器,否则不显示它。这是微调器的html。

<!-- Loading -->
    <div class="ion-text-center" *ngIf="isLoading && timer == 0">
      <ion-spinner name="dots" color="light"></ion-spinner>
    </div>

在页面组件中,每次加载新帖子时我都会将 isLoading 设置为 true。在 setPostData 中,我会将其设置回 false。但是将它与计时器结合使用是行不通的。

posts: any = [];
timer: any = 0;
isLoading: boolean;

constructor(){...}

getPostData(){
    this.timer = setTimeout(() => {}, 2000);
    this.isLoading = true;

    this.postService.getPosts().subscribe(
        (result) => {
            this.setPostData(result);
        }
    );

}

setPostData(data){
    this.posts = data.posts;
    this.isLoading = false;
}

我会找到另一种方法来做到这一点。创建一个计时器(setTimeout)并绑定 toggleLoading 函数。在 setPostData 函数中清除创建的计时器。所以在 2500 毫秒后加载开始。如果未达到 2500 毫秒,计时器将被清除并且加载点不会按预期显示。

posts: any = [];
timer
isLoading: boolean;

constructor(){...}

toggleLoading(){
    this.isLoading = !this.isLoading;
}

getPostData(){
    this.timer = setTimeout(this.toggleLoading.bind(this), 2500);

    this.postService.getPosts().subscribe(
        (result) => {
            this.setPostData(result);
        }
    );

}

setPostData(data){
    this.posts = data.posts;
    if(this.timer) {
        clearTimeout(this.timer);
    }
    this.isLoading = false;
}