【问题标题】:When to dismiss the ionic loading controller while waiting for an observable在等待 observable 时何时关闭离​​子加载控制器
【发布时间】:2017-05-18 03:58:30
【问题描述】:

我想知道如何在等待异步 observable 到达时正确使用 ionic-2 加载控制器 - 因为 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()
    )
 })

第三个问题——如何解散

我注意到有很多关于解除加载控制器的问题(例如Ionic 2 - Loading Controller doesn't work)。解雇后的赶上就足够了..?如果加载后我想推送到另一个页面怎么办?

感谢您的耐心等待。

【问题讨论】:

    标签: angular typescript ionic2 rxjs ionic3


    【解决方案1】:

    第一个问题——如何呈现?

    显示加载器的正确方法是使用then,否则您可能会遇到一些与错误动画相关的问题,并且可能还会遇到一些其他奇怪的问题。毕竟,如果该方法返回了一个 Promise,那么正确的使用方法永远是在 Promise 完成后执行其他操作。

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

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

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

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

    如果使用加载的想法是让用户知道后台正在发生某些事情,所以我认为您应该在第一波之后解除加载。

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

    第三个问题——如何解散?

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

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

    【讨论】:

    • 非常感谢您抽出宝贵时间!留给我的唯一问题是 - 如果我在“第一波”之后将其解雇,那么在第二波之后“再次”解雇它会不会导致错误?
    • 另一个小问题 - loading.dismiss() 与 loading.onDismiss()... 怎么样?我只是在这个问题上来来回回,我想确保我做对了(一劳永逸)谢谢!
    • 如果您尝试多次关闭加载程序,则不会发生任何事情,因为这是由 Ionic 内部处理的(请检查this demo plunker)。关于loading.onDismiss()方法,我不经常和loadingCtrl一起使用,但是我经常用ModalCtrl给调用者发送信息。我想最好的方法是在你想隐藏加载警报时使用dismiss 方法,并使用loading.onDismiss()... 来处理android的物理按钮和其他一些奇怪的场景。
    • 请注意loading.dismiss() 会解除加载,而loading.onDismiss()... 会在警报解除时执行,但不会自行解除。
    猜你喜欢
    • 1970-01-01
    • 2019-12-08
    • 2017-09-12
    • 2017-09-18
    • 2019-03-15
    • 2020-11-27
    • 2015-08-29
    • 1970-01-01
    • 2016-01-12
    相关资源
    最近更新 更多