Loading Route for EmberJS - 02 Jun 2015
When building an ember application, it’s nice to provide a global loading route
for when a route takes a long time to load. This is especially important if
you’re using a library like liquid-fire
for transitions between routes.
While it should always be a goal to optimize slow loading routes, it’s not always possible in all cases, especially for mobile users. For these cases, you want to show a loading spinner, or loading animation of some sort. This lets the user know that their request is being processed by your application.
Adding a global loading view is pretty straightforward. The first thing you’ll
need to do is add a loading action to your application. You can do this in
app/application/route.js
.
import Ember from 'ember';
export default Ember.Route.extend({
actions: {
loading() {
const view = this.container.lookup('view:loading').append();
this.router.one('didTransition', view, 'destroy');
}
}
});
Once that’s done, you’ll need to create a view file.
app/loading/view.js
import Ember from 'ember';
export default Ember.View.extend({
templateName: 'loading',
elementId: 'global-loading'
});
You can then add your template file, where you’ll put the markup for your loading spinner.
app/loading/template.hbs
<div class="loading">Loading…</div>