离子 - 错误:未捕获(承诺):找不到removeView
Posted
技术标签:
【中文标题】离子 - 错误:未捕获(承诺):找不到removeView【英文标题】:Ionic - Error: Uncaught (in promise): removeView was not found 【发布时间】:2017-10-05 07:37:19 【问题描述】:我的 Ionic 应用程序运行良好,但我没有对其执行任何操作,但突然出现此错误,我不知道为什么。
“错误:未捕获(承诺):找不到 removeView
【问题讨论】:
【参考方案1】:对我来说,简单的解决方法正在改变:
this.loader.dismiss()
到:
this.loader.dismiss().then(value =>
console.log("dismiss worked!");
, reason =>
console.log("dismiss rejected!");
);
【讨论】:
【参考方案2】:我更新到最新版本 @ionic/app-scripts 3.3.0,这也发生在我的应用程序中。
【讨论】:
【参考方案3】:请尝试以下对我有用的方法
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)
)
【讨论】:
【参考方案4】:这是我对这个问题最简单的解决方案:
我在实现 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 问题
【讨论】:
我的代码根本不执行最后一个块,所以我的加载器只是呆在那里而不会被解雇【参考方案5】:对我来说,问题是我有
dismissOnPageChange: true
当我创建 loadingCtrl.
在 .present() 之后调用 .dismiss() 太快了(在本地测试期间,api 响应非常快)并且似乎是该参数导致了问题。删除它为我解决了它。
【讨论】:
【参考方案6】:当您想要手动关闭 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,因此只发布了有用且有效的提示和代码。
我希望这会有所帮助!
【讨论】:
但它仍然抛出错误“找不到removeView”..我也在使用确认提示..这是导致错误吗???【参考方案7】:这是 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();
【讨论】:
【参考方案8】:它说您在 load.presenet() 结束之前调用了 loading.dismiss()。 你应该试试
let a = this.loadingCtrl.create(content : 'hello world')
await a.present();
..
.. // your code goes here..
...
a.dismiss()
【讨论】:
【参考方案9】:删除组件不是解决任何问题的方法。
问题原因: 多次调用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;
【讨论】:
我正在使用两种类型的控制器。一种是加载控制器,另一种是 AlertController,我尝试了此代码,但仍然抛出错误“找不到删除视图”。可能是什么问题??? 我对其进行了增强以包含伪引用计数,以便在多个操作请求时不会提前删除 throbber 我们是否需要在我们用 ionic 创建的每个页面中使用“create()”?难道我们不能做一个全局提供者,只做两个函数,比如 show() 和 hide()?【参考方案10】:我删除了 loading.dismiss 函数并解决了它。
【讨论】:
【参考方案11】:我设法通过从我的组件中删除 LoadingController 来解决它。
【讨论】:
你是怎么删除的? 这不是答案。正确答案在上面。 删除不能解决任何问题。 这不是解决方案以上是关于离子 - 错误:未捕获(承诺):找不到removeView的主要内容,如果未能解决你的问题,请参考以下文章
未捕获(承诺):TypeError:无法读取未定义的属性“创建”(离子 3.9,Angularjs 5.0.3)
Chrome:未捕获(承诺)DOMException:加载失败,因为找不到支持的源
Android Chrome:未捕获(承诺)DOMException:加载失败,因为找不到支持的源