Вот как я решил свою проблему.
Я использовал булеву переменную isLoading, чтобы изменить на false при вызове dismiss ().после завершения present (), если "isLoading" === false (означает, что dismiss () уже вызван), то он будет немедленно отклонен.
также я написал код в службе, поэтому мне не нужнонапишите это снова на каждой странице.
loading.service.ts
import { Injectable } from '@angular/core';
import { LoadingController } from '@ionic/angular';
@Injectable({
providedIn: 'root'
})
export class LoadingService {
isLoading = false;
constructor(public loadingController: LoadingController) { }
async present() {
this.isLoading = true;
return await this.loadingController.create({
duration: 5000,
}).then(a => {
a.present().then(() => {
console.log('presented');
if (!this.isLoading) {
a.dismiss().then(() => console.log('abort presenting'));
}
});
});
}
async dismiss() {
this.isLoading = false;
return await this.loadingController.dismiss().then(() => console.log('dismissed'));
}
}
, затем просто вызовите present () и dismiss () со страницы.
пример ввопрос:
customer: any;
constructor(public loading: LoadingService, private customerService: CustomerService)
ngOnInit() {
this.loading.present();
this.customerService.getCustomer('1')
.subscribe(
customer => {
this.customer = customer;
this.loading.dismiss();
},
error => {
console.log(error);
this.loading.dismiss();
}
);
примечание: не забудьте добавить «LoadingService» провайдерам AppModule