我想知道如何在等待异步可观察到的信号时正确使用ionic-2加载 Controller -因为可观察到的信号可能没有响应,也没有单个或多个“波动”。
第一个问题-如何显示
我应该使用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()
)
})
第三个问题-如何取消
我注意到有很多关于关闭加载 Controller 的问题(例如Ionic 2 - Loading Controller doesn't work)。解雇后 catch 就足够了吗?如果加载后我想推送到另一页怎么办...?
感谢您的耐心等待。
最佳答案
呈现加载程序的正确方法是使用then
,因为否则您可能会遇到一些与动画错误有关的问题,也可能会遇到其他一些怪异的问题。毕竟,如果该方法返回了一个Promise,则使用它的正确方法将始终是在Promise完成后做其他事情。
loader.present().then(() => { /* ... */ });
当我需要取消加载时,我也会做同样的事情:
loading.dismiss().then(() => { /* ... */ });
如果使用加载的想法是让用户知道背景中正在发生某些事情,所以我认为您应该在第一波之后关闭加载。
如果没有响应(例如结果为空),则可以包含
*ngIf="result.items.length === 0"
条件,以显示div并显示一条消息,指示结果为空。如果新一波到来的结果中包含一些项目,则该div将自动隐藏。就像
present
方法一样,dismiss
也返回一个promise。在这种情况下,如果不使用then
,则更容易看到动画中的某些错误行为。同样,只需等待dismiss方法结束(通过使用then
),您就可以推送新页面或执行所需的操作,它应该可以正常工作:loading.dismiss().then(() => { this.navCtrl.push(NewPage); });
关于angular - 等待观察时何时关闭离子负载 Controller ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41454020/