我正在使用loadingController Ionic2。
`fetchNotificationListAferUserDataget(){
this.loader = this._loadingController.create({
content: "Please wait... Fetching online notifications",
dismissOnPageChange:true
});
this.loader.present();
this._userDataService.getNotificationList()
.subscribe(
(data) => {
this.loader.dismiss();
let status = data.status;
let returnedData = data.json();
console.log(status,returnedData)
if(data.status == 200){
if(returnedData.notifications.length > 0){
this.notifications = returnedData.notifications;
console.log(this.notifications);
this.loader = this._loadingController.create({
content: "Please wait... Fetching your purchased packages"
});
this.loader.present();
this._userDataService.getAllPackageByUser(this.userData.user_id)
.subscribe(
(data) => this.populateUserPackages(data),
(err) => this.showDataFetchErrorFromServer('Unable to fetch user packages')
)
}else if(returnedData.notifications.result == 0){
console.log('no notifications found');
}
}
},
(err) => {
this.showDataFetchErrorFromServer('Unable to fetch notifications')
}
);//end .subscribe
};`
但我遇到的问题是加载器在没有调用loader.dismiss()的情况下自动出现和消失;
是否有其他人面临同样的问题。任何解决方案。
编辑:包含完整功能代码。加载器在 loader.present()之后立即关闭,没有任何错误,但是当我调用 this.loader.dismiss(); 时,它会给我错误,因为加载器已经被解除
答案 0 :(得分:1)
根据this issue,这是由于在错误的生命周期挂钩上触发loader.present()
而引起的。我也遇到了同样的问题,我在ionViewDidLoad()
钩子上加载了加载程序。 “不能保证在ionViewDidLoad
中已准备好dom,也不能保证事件已准备就绪。”
尝试在ionViewDidEnter()
钩子上显示加载程序。
答案 1 :(得分:0)
我有类似的问题。很可能你需要使用NgZone。
这样的事情:
{... "field_name":"param1", "field_value":83}
" Angular 2在其自己的特殊区域NgZone内部运行。在区域内运行允许人们检测异步任务何时 - 可以改变应用程序内部状态的事情,以及它的视图 - 开始和结束。由于这些异步任务是导致我们的视图改变的唯一因素,因此通过检测它们何时被执行,Angular 2知道可能需要更新视图。"
答案 2 :(得分:-2)
您需要使用setTimeout()
。像:
setTimeout(() => {
this.loader.dismiss();
}, 1000);
另外,请不要使用相同的变量this.loader
来创建2个加载器。只需使用var loading = this._loadingController.create()
等本地变量即可。这可能会在加载API时产生问题。在离子2文档here中,提到了:
请注意,在组件被解除后,它将不再可用,并且必须创建另一个组件。这可以通过将组件的创建和表示包装在可重用的函数中来避免,如下面的使用部分所示。