ido*_*osh 5 rxjs typescript ionic2 ionic3 angular
我想知道如何在等待异步可观察到达时正确使用离子-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()
)
})
Run Code Online (Sandbox Code Playgroud)
第三个问题 - 如何解雇
我注意到解决加载控制器有很多问题(例如,离子2 - 加载控制器不起作用).解雇后赶上是不够的??如果在加载后我想要推送到另一个页面怎么办...?
感谢您的耐心等待.
第一个问题 - 如何呈现?
呈现加载器的正确方法是使用then
,因为否则您可能会面临与错误动画相关的一些问题,也可能出现其他一些奇怪的问题.毕竟,如果方法返回一个promise,那么使用它的正确方法总是在promise完成时做其他事情.
loader.present().then(() => { /* ... */ });
Run Code Online (Sandbox Code Playgroud)
当我需要解除加载时,我也会这样做:
loading.dismiss().then(() => { /* ... */ });
Run Code Online (Sandbox Code Playgroud)
第二个问题 - 什么时候解雇?
如果使用加载的想法是让用户知道背景中发生了某些事情,所以我认为你应该在第一波之后解除加载.
如果没有响应到达(例如结果为空),则可以包含一个*ngIf="result.items.length === 0"
条件来显示div,并显示一条消息,指出结果为空.如果新波浪到达结果中的某些项目,则该div将自动隐藏.
第三个问题 - 如何解雇?
就像present
方法一样,它dismiss
也会返回一个promise.在这种情况下,如果您不使用动画,则更容易在动画中看到一些错误的行为then
.所以再次,只需等待结束方法(通过使用then
),您可以推送新页面或做您需要做的事情,它应该正常工作:
loading.dismiss().then(() => { this.navCtrl.push(NewPage); });
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
8464 次 |
最近记录: |