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