I have a simple Angular http.get:
app.factory('countriesService', function($http) {
return {
getCountryData: function(done) {
$http.get('/resources/json/countries.json')
.success(function(data) { done(data);})
.error(function(error) {
alert('An error occured');
});
}
}
});
Example .JSON:
{
"NoCities": 66,
"Balance": 2103,
"Population": 63705000,
"CityInfo": [
{
"CityName": "London",
"CityPopulation": "7825200",
"Facts": {
"SubFact1": "xzy",
"SubFact2": "xzy",
"SubFact3": "xzy",
"SubFact4": "xzy",
"SubFact5": "xzy"
},
},
{
"CityName": "Manchester",
"CityPopulation": "2584241",
"Facts": {
"SubFact1": "abc",
"SubFact2": "abc",
"SubFact3": "abc",
"SubFact4": "abc"
},
}
],
"SubmitInfo": null,
"FormAction": null,
"FormController": null,
}
I've noticed when my page is performing a .length, sometimes it can take a while for the data to load, for example:
<div>
<a>Countries</a> : {{Countries.length}}
</div>
Does Angular have some form of waiting/loading icon that i could show whilst the data in the DIV is being populated?
Ideally something lightweight and that doesnt require a library to be loaded (my application is using jQuery too)
Thanks
This is my usual approach. To OZ_'s point, this requires Font Awesome. The
<i>
's classesfa fa-spinner fa-spin
are a reference to that library.Although, you could also opt to show/hide a
.gif
that indicates loading.Markup
Using
ng-hide
andng-show
to control visibility of the spinner and element that will contain your populated data.JS
Before your call, set
$scope.dataLoaded
tofalse
. Then, within yoursuccess
block, set it totrue
. Also worth noting you'll need to pass$scope
to your factory.AngularJS is not a CSS-framework. You can find loading icons in TWBS of FontAwesome: http://fortawesome.github.io/Font-Awesome/examples/#spinning