【发布时间】:2017-10-05 07:37:19
【问题描述】:
我的 Ionic 应用程序运行良好,但我没有对其执行任何操作,但突然出现此错误,我不知道为什么。
“错误:未捕获(承诺):找不到 removeView
【问题讨论】:
标签: ionic-framework ionic2 ionic-view ionic3
我的 Ionic 应用程序运行良好,但我没有对其执行任何操作,但突然出现此错误,我不知道为什么。
“错误:未捕获(承诺):找不到 removeView
【问题讨论】:
标签: ionic-framework ionic2 ionic-view ionic3
对我来说,简单的解决方法正在改变:
this.loader.dismiss()
到:
this.loader.dismiss().then(value => {
console.log("dismiss worked!");
}, reason => {
console.log("dismiss rejected!");
});
【讨论】:
我更新到最新版本 @ionic/app-scripts 3.3.0,这也发生在我的应用程序中。
【讨论】:
请尝试以下对我有用的方法
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)
})
}
}
【讨论】:
这是我对这个问题最简单的解决方案:
我在实现 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
}
);
}
希望它能解决 SO 问题
【讨论】:
对我来说,问题是我有
dismissOnPageChange: true
当我创建 loadingCtrl.
在 .present() 之后调用 .dismiss() 太快了(在本地测试期间,api 响应非常快)并且似乎是该参数导致了问题。删除它为我解决了它。
【讨论】:
当您想要手动关闭 Ionic 加载时,您可能需要遵循以下示例。我在离子实验室测试过,效果很好。
Ionic 3+
注意: 如果您手动调用 this.loading.dismiss(),我不建议使用dismissOnPageChange,您可能会两次关闭相同的加载。
为什么下面的解决方案有效?
我认为this.loading.present()是一个异步方法,所以我们不能在this.loading.present()还在运行的时候手动调用this.loading.dismiss()。
所以如果我们需要手动关闭,我们需要确保加载已经存在并且有视图关闭它,我们应该在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
});
});
}
}
Reference Link,因此只发布了有用且有效的提示和代码。
我希望这会有所帮助!
【讨论】:
这是 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();
}
【讨论】:
它说您在 load.presenet() 结束之前调用了 loading.dismiss()。 你应该试试
let a = this.loadingCtrl.create({content : 'hello world'})
await a.present();
..
.. // your code goes here..
...
a.dismiss()
【讨论】:
删除组件不是解决任何问题的方法。
问题原因: 多次调用dismiss加载组件的方法。
解决方案: 在创建加载器时,检查加载器实例是否不已经存在,然后再创建另一个实例。
同样,在关闭加载器时,检查加载器实例是否确实存在,然后才关闭它。
代码:
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;
}
}
【讨论】:
我删除了 loading.dismiss 函数并解决了它。
【讨论】:
我设法通过从我的组件中删除 LoadingController 来解决它。
【讨论】: