何时在等待观察时关闭离子加载控制器

时间:2017-01-03 23:35:44

标签: angular typescript ionic2 rxjs ionic3

我想知道如何在等待异步可观察到达时正确使用离子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 - Loading Controller doesn't work)。解雇后赶上是不够的??如果在加载后我想要推送到另一个页面怎么办......?

感谢您的耐心等待。

1 个答案:

答案 0 :(得分:8)

  

第一个问题 - 如何呈现?

呈现加载程序的正确方法是使用then,因为否则您可能会面临与错误动画相关的一些问题,也可能遇到其他一些奇怪的问题。毕竟,如果方法返回一个promise,那么使用它的正确方法总是在promise完成时做一些其他事情。

loader.present().then(() => { /* ... */ });

当我需要解除加载时,我也会这样做:

loading.dismiss().then(() => { /* ... */ });
  

第二个问题 - 什么时候解雇?

使用加载的想法是让用户知道后台发生了什么事情,所以我认为你应该在第一波之后忽略加载。

如果没有响应到达(例如结果为空),您可以包含*ngIf="result.items.length === 0"条件以显示div,并显示结果为空的消息。如果新的 wave 与结果中的某些项一起到达,则该div将自动隐藏。

  

第三个问题 - 如何解雇?

就像present方法一样,dismiss也会返回一个承诺。在这种情况下,如果您不使用then,则很容易在动画中看到一些错误的行为。所以再次,只需等待结束方法(通过使用then),您可以推送新页面或做您需要做的事情,它应该正常工作:

loading.dismiss().then(() => { this.navCtrl.push(NewPage); });