我想知道如何在等待异步可观察到的到达时正确使用ionic-2加载控制器,因为可观察到可能会出现无响应、单个响应或多个响应"波"。
第一个问题-如何展示
我应该使用loader.present()
还是loader.present().then(..
。我看到了很多"忽略"加载程序异步特性的代码示例(我甚至看到了loader.present(//function to execute)
第二个问题-何时取消
如前所述,来自订阅的响应可能会以未知的"波"响应到达——考虑到这一点,我什么时候应该关闭加载程序?如果没有回应怎么办?如果有几个回应呢?例如:
let loader = this.loadingController.create({content : "something"})
loader.present().then(()=>{
source.subscribe((school)=>{
this.schools.push(school)
loader.dismiss()
}, err=> loader.dismiss()
)
})
第三个问题-如何驳回
我注意到有很多关于卸载控制器的问题(例如,Ionic 2-装载控制器不工作)。解雇后接球够了吗。。?如果加载后我想推送到另一个页面该怎么办。。。?
谢谢你的耐心。
第一个问题-如何呈现?
显示加载程序的正确方法是使用then
,因为否则您可能会面临一些与有缺陷的动画有关的问题,以及其他一些奇怪的问题。毕竟,如果该方法返回promise,那么正确的使用方法总是在promise完成时执行其他操作。
loader.present().then(() => { /* ... */ });
当我需要取消加载时,我也会这样做:
loading.dismiss().then(() => { /* ... */ });
第二个问题-何时解雇?
如果使用加载的想法是让用户知道后台发生了什么,所以我认为你应该在第一波之后取消加载。
如果没有响应到达(例如,结果为空),可以包含一个*ngIf="result.items.length === 0"
条件来显示一个div,并显示一条消息,说明结果为空。如果一个新的wave到达,结果中包含一些项目,则该div将自动隐藏。
第三个问题-如何驳回?
与present
方法一样,dismiss
也返回promise。在这种情况下,如果不使用then
,则更容易在动画中看到一些错误行为。因此,同样,只需等待驳回方法结束(通过使用then
),您就可以推送一个新页面或做您需要做的事情,它应该可以正常工作:
loading.dismiss().then(() => { this.navCtrl.push(NewPage); });