Ionic - Ошибка: нечистота (в обещании): removeView не найден
My Ionic app работает нормально, и я ничего не сделал с этим, но вдруг я получаю эту ошибку, и я не знаю почему.
"Ошибка: не показано (в обещании): removeView не найден
Ответы
Ответ 1
Если вы хотите вручную отключить ионную загрузку, вам может потребоваться следовать приведенному ниже примеру. Что хорошо работает, я проверил в ионных лабораториях.
Ionic 3+
Примечание:
Если вы вызываете this.loading.dismiss() вручную, я не рекомендую использовать dismissOnPageChange, вы, вероятно, дважды отклоняете одну и ту же загрузку.
Почему приведенное ниже решение работает?
Я думаю, что this.loading.present()
является асинхронным методом, поэтому мы не можем вызвать this.loading.dismiss()
вручную, когда this.loading.present()
еще работает.
Поэтому, если нам нужно отменить удаление вручную, нам нужно убедиться, что загрузка уже есть, и иметь возможность ее отменить, мы должны использовать другой метод после present().then
, например, следующий код.
Однако я не уверен, почему у нас не было этой проблемы в старой версии фреймворка (2.0.3).
import { Loading, LoadingController } from 'ionic-angular';
export class ApnSearchPage {
loading: Loading;
constructor(private loadingCtrl: LoadingController) { }
ionViewDidLoad() {
this.createLoader();
}
createLoader(message: string = "Please wait...") { // Optional Parameter
this.loading = this.loadingCtrl.create({
content: message
});
}
public searchClick() {
this.createLoader();
this.loading.present().then(() => {
this.searchService.submitRequest(params, data)
.subscribe(response => {
this.loading.dismiss();
}, error => {
this.loading.dismiss();
this.errorMessage = <any>error
});
});
}
}
Ссылка, поэтому размещены только полезные и рабочие советы и код.
Надеюсь, это поможет!
Ответ 2
Удаление компонента не решение любой проблемы.
Причина проблемы: Существует несколько вызовов для отклонения метода загрузки компонента.
Решение:
Создав загрузчик, проверьте, не присутствует ли экземпляр загрузчика не , а затем создайте другой экземпляр.
Аналогично, при увольнении загрузчика, проверьте, существует ли экземпляр загрузчика , а затем отклоните его.
Код:
constructor(private _loadingCtrl: LoadingController){}
loading;
showLoading() {
if(!this.loading){
this.loading = this._loadingCtrl.create({
content: 'Please Wait...'
});
this.loading.present();
}
}
dismissLoading(){
if(this.loading){
this.loading.dismiss();
this.loading = null;
}
}
Ответ 3
Мне удалось решить эту проблему, удалив LoadController из моего компонента.
Ответ 4
Я удалил функцию load.dismiss и решил ее.
Ответ 5
он говорит, что вы вызвали load.dismiss() до того, как load.presenet() закончил.
вы должны попробовать
let a = this.loadingCtrl.create({content : 'hello world'})
await a.present();
..
.. // your code goes here..
...
a.dismiss()
Ответ 6
Вот один для alertController, но работает очень похоже.
logout() {
let prompt = this.alertCtrl.create({
title: 'Logout',
subTitle: 'Are You Sure You Want To Logout?',
buttons: [
{
text: 'No',
handler: data => {
let navTransition = prompt.dismiss();
navTransition.then(() => {
this.navCtrl.pop();
});
return false;
}
},
{
text: 'Yes',
handler: data => {
this.lgout();
}
}
]
});
prompt.present();
}
Ответ 7
Вот мое простейшее решение этой проблемы:
У меня возникли эти проблемы при реализации LoadingController
Примечание. Не инициализируйте загрузчик внутри конструкции (он работает только в первый раз, и со второго раза вы застрянете с проблемой удаления представления не найден)
loading:any;
this.loading=this.loadingCtrl.create({
spinner:'bubbles',
content:'Please wait..'
});
Я отображал загрузчик при получении данных с сервера
Ниже приведен рабочий код
gosignup(number:string){
this.loading.present();//showing the loader
//calling webservice
this.Authprovider.smsverify(number).subscribe(
data=>{
this.loading.dismiss();//to dismiss loader
if(data.json().msg=="success"){
this.navCtrl.push(SignupPage,{
user:this.Usersignup
})
}
if(data.json().msg=="error"){
this.showToastWithCloseButton("Invalid otp");
}
},
err=>{
this.loading.dismiss();
this.showToast("Please try again later");
},
()=>{
this.loading.dismiss();//to dismiss loader
}
);
}
Надеюсь, что это решит так проблемы
Ответ 8
Для меня проблема была в том, что у меня было
dismissOnPageChange: true
когда я создал loadingCtrl.
.Dismiss() вызывался слишком скоро после .present() (во время локального тестирования API реагирует очень быстро), и кажется, что этот параметр вызвал проблему. Удаление это решило это для меня.
Ответ 9
Пожалуйста, попробуйте ниже, который работал для меня
import { App } from 'ionic-angular';
export class PopoverPage {
constructor(public navCtrl: NavController
, public viewCtrl: ViewController
, public appCtrl: App) {
this.viewCtrl.dismiss().then(()=>{
setTimeout(()=>{
confirm.dismiss().then(()=>{
this.appCtrl.getRootNav().setRoot('DashboardPage');
})
},300)
})
}
}
Ответ 10
Я обновил до последней версии @ionic/app-scripts 3.3.0, и это также происходит в моем приложении.