Comment afficher un écran de chargement lorsque je change un itinéraire dans Angular 2?
html
css
angular
angular2-routing
Lucas
la source
la source
Réponses:
Le routeur angulaire actuel fournit des événements de navigation. Vous pouvez vous y abonner et apporter des modifications à l'interface en conséquence. N'oubliez pas de compter dans d'autres événements tels que
NavigationCancel
etNavigationError
d'arrêter votre spinner en cas d'échec des transitions de routeur.app.component.ts - votre composant racine
app.component.html - votre vue racine
Réponse améliorée : Si vous vous souciez des performances, il existe une meilleure méthode, elle est légèrement plus fastidieuse à mettre en œuvre, mais l'amélioration des performances vaudra le travail supplémentaire. Au lieu d'utiliser
*ngIf
pour afficher conditionnellement le spinner, nous pourrions tirer parti de AngularNgZone
etRenderer
activer / désactiver le spinner, ce qui contournera la détection de changement d'Angular lorsque nous changerons l'état du spinner. J'ai trouvé cela pour rendre l'animation plus fluide par rapport à l'utilisation*ngIf
ou à unasync
tuyau.Ceci est similaire à ma réponse précédente avec quelques ajustements:
app.component.ts - votre composant racine
app.component.html - votre vue racine
la source
router navigation
et que jeit triggering the spinner
ne pouvais pas l'arrêter.navigationInterceptor
semble être une solution, mais je ne sais pas si quelque chose d'autre attend de se casser. S'il est mélangé avec le,async requests
il introduira à nouveau le problème, je pense.display
soitnone
ouinline
.'md-spinner' is not a known element:
. Je suis assez nouveau sur Angular. Pourriez-vous s'il vous plaît me dire quelle pourrait être l'erreur?MISE À JOUR: 3 Maintenant que j'ai mis à niveau vers le nouveau routeur, l' approche de @borislemke ne fonctionnera pas si vous utilisez
CanDeactivate
guard. Je me dégrade à mon ancienne méthode,ie:
cette réponseUPDATE2 : Les événements de routeur dans le nouveau routeur semblent prometteurs et la réponse de @borislemke semble couvrir l'aspect principal de l'implémentation de spinner, je ne l'ai pas testé mais je le recommande.
UPDATE1: J'ai écrit cette réponse à l'époque de
Old-Router
, quand il n'y avait qu'un seul événementroute-changed
notifié viarouter.subscribe()
. J'ai également ressenti une surcharge de l'approche ci-dessous et j'ai essayé de le faire en utilisant uniquementrouter.subscribe()
, et cela s'est retourné contre lui parce qu'il n'y avait aucun moyen de détectercanceled navigation
. J'ai donc dû revenir à une approche longue (double travail).Si vous connaissez votre chemin dans Angular2, c'est ce dont vous aurez besoin
Boot.ts
Composant racine - (MyApp)
Spinner-Component (s'abonnera au service Spinner pour changer la valeur d'actif en conséquence)
Spinner-Service (amorcez ce service)
Définissez une observable à souscrire par composant spinner pour changer le statut en cas de changement, et fonction pour connaître et définir le spinner actif / inactif.
Composants de tous les autres itinéraires
(échantillon):
la source
spinner-service
instant, vous avez juste besoin d'autres parties pour le faire fonctionner. Et rappelez-vous que c'est pourangular2-rc-1
Pourquoi ne pas simplement utiliser un simple CSS:
Et dans vos styles:
Ou même nous pouvons le faire pour la première réponse:
Et puis simplement juste
L'astuce ici est que les nouvelles routes et composants apparaîtront toujours après la sortie du routeur , donc avec un simple sélecteur css, nous pouvons afficher et masquer le chargement.
la source
Si une logique spéciale est requise pour la première route uniquement, vous pouvez effectuer les opérations suivantes:
AppComponent
J'avais besoin de cela pour masquer le pied de page de ma page, qui apparaissait autrement en haut de la page. De plus, si vous souhaitez uniquement un chargeur pour la première page, vous pouvez l'utiliser.
la source
Vous pouvez également utiliser cette solution existante . La démo est là . Cela ressemble à la barre de chargement YouTube. Je viens de le trouver et de l'ajouter à mon propre projet.
la source