Anyone has a “recipe” of how to use the Ionic 2 Loading component while using async pipe to resolve observables?
I have a page that make usage of a custom component:
<ion-content>
<component [products]="productService.products$ | async"></component>
</ion-content>
How to display the Ionic 2 Loading component while productService.products$ is not resolved?
Thanks for help!
I think that’s probably outside the scope of the AsyncPipe. You could have a backing boolean in the controller that determines whether the loading component is displayed, and update it on a subscription to the productService call, or store products
in a component variable and use that variable being undefined
or not as the trigger for the loading component. I only use the AsyncPipe for situations where it’s self-contained.
I’m using a lot of Async Pipes, I’m not sure if the best solution, but it’s easier to handle because you don’t need to unsubscribe.
What do you mean with “self-contained”?
My project uses angularfire2 and has some data services that returns FirebaserListObservable that will be pass to child components using the async pipe.
That way I don’t have almost any .subscribe in my project. But now I ended up in this case of make usage of loading component.
“Not needing to interact with any part of the app outside of the component using the AsyncPipe”. I understand and appreciate why you’re trying to do what you do, but if I were the author of AsyncPipe, I couldn’t think of an easy way to expose what you are asking for.
Hi @paulogr,
This might be what you’re looking for. If I understand you correctly, you want to show a “Loading” indicator while the data is being streamed and dismiss the loading when it completes. Here’s my implementation.
ngOnInit() {
this.products = this.productService.products$.do(
collection => { this.hideSpinner() },
error => {
this.hideSpinner()
}
)
this.showSpinner()
}
Let me know if you’re figured out a better way. Cheers.
1 Like
Super! This approach worked for me exactly as I wanted!
.do( ) operator was renamed .tap( ) in RxJS6
See a summary of RxJS changes here: https://www.academind.com/learn/javascript/rxjs-6-what-changed/