即使在调用dismise()之后,ionic loading controller仍保持显示

piztneat  于 2021-09-29  发布在  Java
关注(0)|答案(0)|浏览(250)

我将loading controller作为一个单独的服务使用,并在http拦截器中调用了present和Disclose方法,但即使拦截器释放了请求并调用了Disclose方法,loading Model仍会在ui中继续加载,
拦截代码,

removeRequest(req: HttpRequest<any>) {
        const i = this.requests.indexOf(req);
        if (i >= 0) {
          this.requests.splice(i, 1);
        }

      }

      intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
        this.loadingCtrl.present();
        this.requests.push(request);
        return Observable.create(observer => {

          const subscription = next.handle(request)
            .subscribe(
              event => {
                if (event instanceof HttpResponse) {
                  this.removeRequest(request);
                  observer.next(event);
                }
              },

              err => {
                this.removeRequest(request);
                observer.error(err);
                this.toastor.presentToast(err.message);
              },

              () => {
                this.removeRequest(request);
                observer.complete();
                this.loadingCtrl.dismiss();
              });

          return () => {
            this.removeRequest(request);
            subscription.unsubscribe();
          };

        });

      }
    }

装载机控制器服务

export class LoadingService {
  isLoading: boolean = false;
  i = 0;
  constructor(public loadingController: LoadingController) {}

  async present() {
    console.log('instance present ', this.i);
    this.isLoading = true;
    return await this.loadingController
      .create({
        message: 'Loading.......',
        backdropDismiss: true,
      })
      .then((loader) => {
        loader.present().then(() => {
          if (!this.isLoading) {
            loader.dismiss().then(() => {});
          }
        });
      });
    this.i = this.i + 1;
  }

  async dismiss() {
    console.log('instance dismiss', this.i);
    this.isLoading = false;
    await this.loadingController.getTop().then((hasLoading) => {
      if (hasLoading) {
        return this.loadingController.dismiss().then(() => {});
      }
    });
    this.i = this.i + 1;
  }
}

知道为什么会这样吗?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题