Так что, если вы посмотрите на пример из документации по ionic 3 ниже, вы заметите, что они присваивают loadingController переменной var 'loading', затем он вызывается, чтобы позже закрыть загрузчик (loading.dismiss ()).
presentLoadingDefault() {
let loading = this.loadingCtrl.create({
content: 'Please wait...'
});
loading.present();
setTimeout(() => {
loading.dismiss();
}, 5000);
}
Чтобы предотвратить поведение стека, вы можете просто иметь переменную на уровне вашего основного компонента или поставщика, а не в контексте выполнения метода presentLoadingDefault () и выполнить проверку, если загрузчик уже включен в вашем методе.
Вот как бы я использовал его в «loadingProvider»:
import { Injectable } from '@angular/core';
import { LoadingController } from 'ionic-angular';
@Injectable()
export class LoadingProvider {
public loading = null;
constructor (
private loadingCtrl: LoadingController
) {
}
presentLoader() {
// this below will prevent "stacking" as long as we treat this.loading as a single source of truth for any loader:
if (this.loading) {
this.loading.dismiss();
this.loading = null;
}
// the rest is as usual
this.loading = this.loadingCtrl.create({
content: 'Please wait...'
});
this.loading.present();
setTimeout(() => {
loading.dismiss();
}, 5000);
}
}