angular - 等待可观察对象时何时关闭离​​子加载 Controller

标签 angular typescript ionic2 rxjs ionic3

我想知道如何在等待异步 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/

相关文章:

angular - Angular N-声明常量文件的最佳实践是什么?

wordpress - Woocommerce Rest API 参数过滤器

html - Google 分析跟踪器未在 ionic 2 应用程序中启动

当值相等时,Angular 和 NGRX 会阻止选择器在状态更改时发出相同的值

angular - 如何从 Angular 7 中的 API 响应创建动态表单?

typescript - 什么是 typescript 类型?

javascript - 无法将数据从父组件传递到子组件

javascript - javascript中的傅立叶变换可视化

angular - Ionic 2 loader 没有在正确的时间显示

Angular - ngClass 不工作