Applications mono-page avec ngRoute et ngAnimate dans AngularJS

Les applications d'une seule page vous permettent d'actualiser une certaine partie d'une page Web en acheminant tout contenu stocké dans un fichier .html distinct. Ce faisant, vous ne rechargez pas votre page principale.

AngularJS fournit un module nommé ngRoute exactement à cet effet.

Un autre module utile de AngularJS est ngAnimate, ce qui facilite l'animation avec certaines classes CSS..

Dans ce tutoriel, je vais essayer d’expliquer chaque étape de manière approfondie, bien que vous ayez encore besoin de connaissances de base en AngularJS pour pouvoir suivre.

Commencer avec une page principale

Structure basique

Ce fichier index.html va être notre page principale où nous avons du contenu fixe et routé.

Je vais commencer par un document HTML de base et inclure toutes les bibliothèques nécessaires ainsi que notre feuille de style personnalisée nommée style.css et un fichier JavaScript angularApp.js.

          

 Maintenant, j'ajoute deux DIV avec les noms d'identifiant de fixeContenu et routedContent à l'intérieur d'un mainWrapper DIV.

routedContent est également enveloppé dans une autre DIV nommée emballage. C'est parce que le routedContent doit être positionné de manière absolue par rapport à une division parent, car lors de l’animation de routage, deux éléments de contenu différents se heurtent..

     

Comme l'indiquent les noms, fixeContenu sera le contenu statique de notre page principale, et routedContent changera dynamiquement lors de l'interaction de l'utilisateur.

Afin de définir une application angulaire dans notre fichier HTML, nous devons utiliser le ng-app directif. Comme toute la page sera une application angulaire, nous devons attribuer cette directive au mainWrapper DIV.

Nous avons aussi besoin de ng-view directive, qui indique à la DIV qu'elle est assignée pour afficher le contenu de la page routée.

Maintenant notre fichier index.html ressemble à ceci:

     

le menu de navigation

Nous avons besoin d’un menu de navigation pour acheminer différents éléments de contenu vers ng-view.

Nous allons utiliser le ul et une éléments pour créer un menu horizontal simple. Ci-dessous, vous pouvez voir l'extrait de code HTML pour la structure de menu.

    Page1 Page2 Page3 Page4

Par défaut, le ng-route module utilise le ! préfixe. Cependant, ici nous utilisons seulement # en face de nos pages pour être acheminé. Ceci est fait avec le hashPrefix attribut utilisé dans la configuration, que je vais expliquer plus tard dans la section correspondante. Pour l'instant, prends-le comme il est.

Notre fichier HTML final est le suivant:

     
    Page1 Page2 Page3 Page4

Styliser la page principale

Puisque ce tutoriel est axé sur AngularJS, je ne vais pas détailler le style CSS. Si vous avez déjà des connaissances en CSS, stylisez la page comme vous le souhaitez. Sinon, vous pouvez utiliser le style que je fournis ci-dessous.

html, body margin: 0; rembourrage: 0;  #mainWrapper display: flex; direction de flexion: colonne; align-items: centre; margin-top: 50px #fixedContent margin-bottom: 50px;  #wrapper width: 350px;  #routedContent width: 350px; position: absolue;  ul display: flex; justifier-contenu: espace-entre; largeur: 350px; marge: 0; rembourrage: 0;  a text-decoration: none; couleur: #FFFFFF; famille de polices: Arial; style de liste: aucun; couleur de fond: #cecece; rembourrage: 7px 10px; border-radius: 2px; 

Pages à acheminer

Chaque page qui sera acheminée vers DIV avec le ng-view directive à l'intérieur du fichier HTML principal peut avoir une structure HTML unique et un style CSS.

Commençons avec page1.html.

Puisque nous voulons un style spécifique pour chaque page, nous avons besoin de fichiers CSS distincts pour chaque page. Par conséquent, nous créons également un fichier nommé page1.css, qui contiendra les règles de style de page1.html.

La structure HTML de base pour page1 est la suivante:

 

Page 1

Lorem ipsum dolor sit amet, consectetur elit adipiscing, sed eiusmod tempor incidid ut labore et dolore magna aliqua. Tout en un minimum de poids, l’exercice de nos exercices en cours de travail, mais il n’existe que d’excellents résultats. Duis aute irure dolor in reprrehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.

En haut, nous avons lié le fichier CSS qui va styler la page, et nous avons déclaré une DIV avec le nom id de Page 1, où tout le contenu sera déposé.

Je vais rester simple, mais c'est à vous de décider comment structurer le fichier HTML. N'oubliez pas que votre conteneur sera toujours la DIV à laquelle le ng-view la directive est assignée. Donc, tout dans vos pages routées sera relatif à cette DIV.

Le style de page1.html est donné ci-dessous:

# page1 font-family: Arial;  h1 color: # ffa42a; 

Les trois autres pages peuvent être totalement différentes, mais par souci de simplicité, j’utilise simplement le même modèle pour chaque page HTML et des fichiers CSS légèrement différents (différents h1 couleurs du texte).

page2.html & page2.css

 

Page 2

Ut enim ad minima veniam, quis nostrum exercitem ullam corporis suscipit laboriosam, sans aucun aliquid ex ea commodi conséqui? Quis autem vel eum iure reprehenderit qui in a voluptate velit esse quam nihil molestiae conséquatur, vel illum qui dolorem eum fugiat quo voluptas nulla pariatur?

# page2 font-family: Arial;  h1 color: cornflowerblue; 

page3.html & page3.css

 

Page 3

Lorem ipsum dolor sit amet, consectetur elit adipiscing, sed eiusmod tempor incidid ut labore et dolore magna aliqua. Tout en un minimum de poids, l’exercice de nos exercices en cours de travail, mais il n’existe que d’excellents résultats. Duis aute irure dolor in reprrehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.

# page3 font-family: Arial;  h1 color: # b2ce6f; 

page4.html & page4.css

 

Page 4

Ut enim ad minima veniam, quis nostrum exercitem ullam corporis suscipit laboriosam, sans aucun aliquid ex ea commodi conséqui? Quis autem vel eum iure reprehenderit qui in a voluptate velit esse quam nihil molestiae conséquatur, vel illum qui dolorem eum fugiat quo voluptas nulla pariatur?


# page4 font-family: Arial;  h1 color: # ff4517; 

Définition de ngRoute & ngAnimate en JavaScript

Jusqu'à présent, nous avons complété tous les fichiers HTML et CSS nécessaires. Maintenant il est temps d'écrire le code JavaScript qui contrôle le routage et l'animation.

Depuis notre ng-app la directive est nommée mainApp, nous utilisons cet identifiant dans la fonction module. Nous devons également inclure le ngRoute et ngAnimate les dépendances.

mainAngular = angular.module ('mainApp', ['ngRoute', 'ngAnimate']);

Maintenant nous avons accès à $ routeProvider et $ locationFournisseur.

Nous allons utiliser le $ routeProvider pour gérer les parcours et $ locationFournisseur pour changer le hashPrefix, qui est mis à ! par défaut.

Nous utilisons .when ('/ page1', templateUrl: 'page1.html') pour définir la page à acheminer quand Page 1 est cliqué dans notre fichier HTML principal.

Nous répétons la même ligne de code pour chaque page à acheminer. À la fin, nous utilisons .sinon (redirectTo: '/ page1'), qui gère les noms de page inattendus. Si vous essayez de visiter un nom de page non défini, dites page5, vous serez redirigé vers Page 1.

Le code JavaScript complet est ci-dessous:

var mainAngular = angular.module ('mainApp', ['ngRoute', 'ngAnimate']); mainAngular.config (function ($ routeProvider, $ locationProvider) $ routeProvider .when ('/ page1', templateUrl: 'page1.html') .when ('/ page2', templateUrl: 'page2.html' ) .when ('/ page3', templateUrl: 'page3.html') .when ('/ page4', templateUrl: 'page4.html') .otherwise (redirectTo: '/ page1'); $ locationProvider.hashPrefix ("););

Note supplémentaire:Si vous souhaitez ajouter un spécifique ng-contrôleur directive pour toutes les pages à acheminer, vous pouvez gérer cela à l'intérieur du $ routeProvider.

Un exemple pour Page 1:

.when ('/ page1', templateUrl: 'page1.html', contrôleur: 'page1Controller')

En fin de compte, notre page devrait ressembler à ceci et vous devriez pouvoir naviguer entre les pages sans animations de transition..

Animation des transitions de page

Il est maintenant temps d'animer les transitions de route.

Pour l'animation, AngularJS a des classes CSS intégrées grâce à la dépendance ngAnimate.

Les classes que nous allons utiliser sont:

  • ng-enter: Les styles CSS de départ pour l'animation enter.
  • ng-enter-active: Les styles CSS de finition pour l'animation enter.
  • ng-quitter: Les styles CSS de départ pour l'animation de congé.
  • ng-leave-active: Les styles CSS de finition pour l'animation de congé.

Donc, le contenu routé qui arrive dans la page principale a une transition de ng-enter à ng-enter-active. De même, le contenu de la page principale quitte le ng-quitter à ng-leave-active.

Nous devons attacher les classes mentionnées ci-dessus à notre routedContent classe.

Un exemple de transition est donné ci-dessous. Vous pouvez créer vos propres animations de transition ou utiliser celle-ci dans votre style.css fichier.

# routedContent.ng-enter transform: translateX (-500px); opacité: 0; -webkit-transition: tous les 0.35s cubes-bezier (1, .01,0, .99); -moz-transition: toutes les 0,35s de Bézier-cube (1, 0,01, 0,99); -ms-transition: toutes les 0,35s de Bézier cubique (1, 0,01,0, 0,99); -o-transition: toutes les 0,35s de Bézier-cube (1, 0,01, 0,99); transition: tous les 0,35s de Bézier cube (1, 0,01, 0, 99);  # routedContent.ng-enter-active transform: translateX (0px); opacité: 1;  # routedContent.ng-leave transform: translateX (0); opacité: 1; -webkit-transition: tous les 0.35s cubes-bezier (1, .01,0, .99); -moz-transition: toutes les 0,35s de Bézier-cube (1, 0,01, 0,99); -ms-transition: toutes les 0,35s de Bézier cubique (1, 0,01,0, 0,99); -o-transition: toutes les 0,35s de Bézier-cube (1, 0,01, 0,99); transition: tous les 0,35s de Bézier cube (1, 0,01, 0, 99);  # routedContent.ng-leave-active transform: translateX (500px); opacité: 0; 

Ci-dessous le résultat final du projet sur Plunker.

Conclusion

Dans ce didacticiel, nous avons expliqué comment créer des applications SPA avec le ng-route module de AngularJS, puis nous avons animé les transitions à travers les classes CSS de ng-animate.

En utilisant seulement quatre classes CSS fournies par ng-animate, vous pouvez réaliser diverses animations. Vous pouvez toujours attacher des classes supplémentaires pour avoir plus de contrôle sur les animations de transition. Par exemple, vous pouvez rendre vos transitions de page sensibles à la direction.

J'ai également mentionné qu'en attachant le manette directive à chaque page spécifique à l'intérieur de la $ routeProvider, vous pouvez obtenir un contrôle supplémentaire sur chaque page.

JavaScript, avec ses bibliothèques telles que Angular, est devenu l’un des langages de facto du travail sur le Web. Ce n’est pas sans ses courbes d’apprentissage, et il existe de nombreux cadres et bibliothèques pour vous tenir occupé. Si vous recherchez des ressources supplémentaires à étudier ou à utiliser dans votre travail, consultez ce que nous avons à votre disposition sur le marché Envato..

J'espère que ce tutoriel vous a donné une idée générale de la façon d'utiliser le ng-route et ng-animate modules ensemble.