Angular UI View Spinner
A declarative, powerful drop-in addition to UI Router, enabling spinners to be shown when executing resolves before the route change is complete.
Motivation: Global spinners suck, UX and humans desire to know what part of the screen is loading. UI Router gives us the hooks we need and this directive is the easiest drop-in replacement to complicated per-view or global loading indicators.
Most importantly, this works as you nest multiple <ui-view> elements, and comes with a good set of defaults to not show if the data is loaded within a certain amount of time (avoids the spinner being flashed on /off).
Demo / Example
Installation
- Install the plugin into your Angular.js project, manually or via:
bower install angular-ui-view-spinner --save- Include
angular-ui-view-spinner.cssin your app:
<link rel="stylesheet" href="bower_components/angular-ui-view-spinner/src/angular-ui-view-spinner.css" />- Include
angular-ui-view-spinner.jsin your app:
<script src="bower_components/angular-ui-view-spinner/src/angular-ui-view-spinner.js"></script>- Add
angular-ui-view-spinneras a new module dependency in your angular app.
var myapp = angular.module('myapp', ['angular-ui-view-spinner']);- Ensure that the other Angular.js module dependencies are included:
var myapp = angular.module('myapp', ['angularSpinner', 'ui.router' .. ]);Creating the Directive
- [ required ] Replace
<ui-view ...>or<div ui-view ...>with<ui-loading-view ...>or<div ui-loading-view ...>. - [ required ] Define the root-state for that
<ui-loading-view>based on the parents route. - [ optional ] Specify the preset size of the spinner
size="small | medium | large". - [ optional ] Customise the
angularSpinnerspinner dimensions directly:spinner-size="{ radius: 50, width: 10, length: 60 }".
NOTE: The spinner will appear on any view where you have resolve: defined with an async loader, whether it's one async request or many.
Complete (minimal) example:
<div> <a ui-sref="example.one">Route 1</a> <a ui-sref="example.two">Route 2</a> </div> <ui-loading-view root-state="example"></ui-loading-view>Notes
- You can use either the SASS styles directly file under
/srcor the compiled CSS files, up to you. - You may wish to customise the
margin-topof the spinner to the<ui-view>containers, or use flex-box or another method to vertically center the spinner but it depends which browsers / versions you are targeting - the default ismargin-top: 50px.
Running Locally
- Checkout git repository locally:
git clone [email protected]:rpocklin/angular-ui-view-spinner.git npm installbower installgrunt serve- View
http://localhost:9000/example/in your browser to see the example.
Contributing
- Fork it
- Create your feature branch (
git checkout -b my-new-feature) - Make your changes, run
gruntto ensure all tests pass. (Ideally add more tests!) - Commit your changes (
git commit -am 'Added some feature') - Push to the branch (
git push origin my-new-feature) - Create a new Pull Request
History
- 1.0.0 Initial release
TODO
- Investigate showing a spinner while angular bootstraps and loads initially (on initial route lifecycle).
- Allow this to be used with a pure icon and CSS instead of
angularSpinner(via transclude).
License
Released under the MIT License. See the LICENSE file for further details.