
Sous Aurelia lorsque vous naviguez ou chargez une ressource il est bien de faire patienter l’utilisateur avec une animation bloquant l’interface.
Le composant « nprogresse » permet de faire cela.
Installation de « nprogress »
Installer « nprogress » dans votre projet Aurelia
npm install nprogress --save
Configuration de « nprogress » sous Aurelia
Dans le dossier « src/resources/elements » créez le fichier « loading-indicator.js » avec le script suivant :
import * as nprogress from 'nprogress'; import {bindable, noView} from 'aurelia-framework'; import 'nprogress/nprogress.css'; @noView export class LoadingIndicator { @bindable loading = false; loadingChanged(newValue) { if (newValue) { nprogress.start(); } else { nprogress.done(); } } }
Ce code crée un composant HTML « loading-indicator » non relié à une vue (de même non), mais important une feuille de style « nprogress/nprogress.css ».
Définissez le plug-in dans le fichier « resources/index.js » en ajoutant :
import {PLATFORM} from 'aurelia-framework'; export function configure(config) { config.globalResources([PLATFORM.moduleName('./elements/loading-indicator')]); }
Positionner le composant HTML de nprogress dans la page HTML principale « App.html » en ajoutant le code suivant :
<loading-indicator loading.bind="router.isNavigating || context.isRequesting"></loading-indicator>
Pour activer ce composant il suffit de mettre a « true » la variable de « context.isRequesting », on d’appeler la méthode « nprogress.start() ». Une barre bleue de progression s’affichera en haut.
Pour le cacher, appelez-la méthode « nprogress.stop(); »
Personnalisation de la barre de progression
Vous pouvez changer le style de la barre de progression en ajout le code suivant dans votre fichier style CSS principale :
#nprogress { display: block; position: fixed; z-index: 1030; left: 0; top: 0; right: 0; bottom: 0; opacity: 0.8; filter: alpha(opacity=80); /* For IE8 and earlier */ background-color: #fff; } #nprogress .bar { height : 8px; } #nprogress .spinner { display: block; position: fixed; z-index: 1031; top: 15px; right: 50%; }