AngularJS ng-view avec exemple
โก Rรฉsumรฉ intelligent
Dans AngularJS, les vues permettent ร une page de modifier son contenu sans avoir ร naviguer vers une autre, ce qui donne l'impression d'une application monopage instantanรฉe. La directive `ng-view` dรฉlimite la zone que chaque route remplace par son propre modรจle et contrรดleur.

Des sites bien connus tels que Gmail Utilisez le concept d'application monopage (SPA). Lorsqu'un utilisateur demande une autre page, l'application ne change pas de page ; elle affiche la nouvelle page directement dans la page actuelle, donnant ainsi l'impression ร l'utilisateur de ne jamais avoir quittรฉ l'application. AngularJS propose le mรชme rรฉsultat grรขce ร l'utilisation conjointe des vues et des routes.
โ ๏ธ Avis d'assistance : AngularJS a atteint fin de vie le 31 dรฉcembre 2021 et ne reรงoit plus aucun correctif ni mise ร jour de sรฉcuritรฉ. La directive ci-dessous reste valable pour la maintenance des applications AngularJS 1.x existantes ; dans les versions modernes Angulaire l'รฉquivalent est <router-outlet>.
Qu'est-ce qu'une vue ?
Une vue correspond au contenu affichรฉ ร l'utilisateur. Quel que soit le contenu que l'utilisateur souhaite voir, la vue correspondante de l'application s'affiche.
La combinaison de vues et de routes divise une application en vues logiques et lie chacune ร une vue. contrรดleurce qui rend l'application plus facile ร gรฉrer.
Prenons l'exemple d'une application de commande permettant ร un client de consulter ses commandes et d'en passer de nouvelles. Le schรฉma ci-dessous illustre comment elle devient une application monopage.
Au lieu de deux pages web distinctes, l'une pour ยซ Voir les commandes ยป et l'autre pour ยซ Nouvelles commandes ยป, AngularJS utilise deux vues sur la mรชme page, accessibles via deux liens de rรฉfรฉrence, #show et #new:
- Navigation vers
MyApp/#showAffiche la vue ยซ Voir les commandes ยป sans quitter la page. Seule cette section de la page existante est actualisรฉe. - Navigation vers
MyApp/#newIl en va de mรชme pour la vue ยซ Nouvelles commandes ยป.
Le fait de sรฉparer une application en vues de cette maniรจre la rend plus facile ร gรฉrer et ร modifier, et chaque vue possรจde un contrรดleur correspondant contenant la logique mรฉtier de cette fonction.
Directive ng-view dans AngularJS
Le ngView directive complรจte le $route service en incluant le modรจle rendu de l'itinรฉraire actuel dans le fichier de mise en page principal, normalement index.html.
ร chaque modification de l'itinรฉraire actuel, la vue affichรฉe change en consรฉquence. $route configuration, sans que la page elle-mรชme se recharge. Routes sont traitรฉes sรฉparรฉment ; ici, l'accent est mis sur l'ajout de plusieurs vues.
L'organigramme ci-dessous illustre l'ensemble du processus, que l'exemple dรฉtaille ensuite รฉtape par รฉtape.
Comment implรฉmenter ng-view dans AngularJS
Cet exemple prรฉsente deux options ร l'utilisateur : afficher un รฉvรฉnement et ajouter un รฉvรฉnement. Cliquer Ajouter un รฉvรฉnement affiche la vue Ajouter un รฉvรฉnement, et il en va de mรชme pour Afficher un รฉvรฉnement.
รtape 1) Incluez le fichier angular-route comme rรฉfรฉrence de script. Ce fichier est nรฉcessaire pour utiliser plusieurs routes et vues, et est disponible sur le site d'AngularJS.
รtape 2) Ajoutez les balises href et la balise div.
- Ajoutez des balises href pointant vers ยซ Ajouter un nouvel รฉvรฉnement ยป et ยซ Afficher lโรฉvรฉnement ยป.
- Ajoutez une div contenant le
ng-viewDirective permettant de dรฉlimiter la zone d'affichage. La vue correspondante y est insรฉrรฉe ร chaque clic sur l'un ou l'autre lien.
รtape 3) Dans la balise script AngularJS, ajoutez la configuration de routage.
- Lorsque l'utilisateur clique sur Nouvel รฉvรฉnement lien, chargements AngularJS
add_event.html, injecte son balisage dans la vue et utiliseAddEventControllerpour la logique mรฉtier. - Lorsque l'utilisateur clique sur Afficher l'รฉvรฉnement lien, รงa charge
show_event.htmlet utiliseShowDisplayController. - Le
otherwiseCette clause dรฉfinit la vue par dรฉfaut affichรฉe ร l'utilisateur, qui est ici DisplayEvent.
รtape 4) Ajoutez des contrรดleurs pour gรฉrer la logique mรฉtier des deux fonctions. Chacun se contente de dรฉfinir un message sur son objet de portรฉe, qui s'affiche lorsque la vue correspondante est prรฉsentรฉe.
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Event Registration</title> <script src="https://code.angularjs.org/1.8.3/angular.min.js"></script> <script src="https://code.angularjs.org/1.8.3/angular-route.js"></script> </head> <body ng-app="sampleApp"> <h1>Guru99 Global Event</h1> <div class="container"> <ul> <li><a href="#!/NewEvent">Add New Event</a></li> <li><a href="#!/DisplayEvent">Display Event</a></li> </ul> <div ng-view></div> </div> <script> var app = angular.module('sampleApp', ["ngRoute"]); app.config(function($routeProvider) { $routeProvider .when("/NewEvent", { templateUrl: "add_event.html", controller: "AddEventController" }) .when("/DisplayEvent", { templateUrl: "show_event.html", controller: "ShowDisplayController" }) .otherwise({ redirectTo: '/DisplayEvent' }); }); app.controller("AddEventController", function($scope) { $scope.message = "This is to Add a new Event"; }); app.controller("ShowDisplayController", function($scope) { $scope.message = "This is to display an Event"; }); </script> </body> </html>
โ ๏ธ Trois corrections ร apporter ร l'annonce originale. Tout d'abord, les liens lisent #!NewEvent sans barre oblique tandis que les routes sont dรฉclarรฉes comme /NewEvent, donc rien ne correspond. ร partir d'AngularJS 1.6, le prรฉfixe de hachage par dรฉfaut est !, ce qui constitue l'adresse correcte #!/NewEvent โ une barre oblique aprรจs le point d'exclamation. Deuxiรจmement, ShowDisplayController Afficher le message ยซ Ceci est l'affichage d'un รฉvรฉnement ยป, sans le mot ร que les citations du texte environnant. Troisiรจmement, lib/bootstrap.js Cette variable รฉtait chargรฉe ร partir d'un chemin relatif qui ne aboutit nulle part et n'est jamais utilisรฉe ; elle a donc รฉtรฉ supprimรฉe.
รtape 5) Crรฉez les pages add_event.html et show_event.htmlChacune contient un en-tรชte et une expression qui affiche le message injectรฉ par son contrรดleur.
- add_event.html
<h2>Add New Event</h2> {{message}}
- show_event.html
<h2>Show Event</h2> {{message}}
Si le code s'exรฉcute correctement, le rรฉsultat suivant s'affiche dans le navigateur.
Sortie :
Erreurs courantes liรฉes ร ng-view et comment les corriger
Presque tous les รฉchecs liรฉs ร ng-view proviennent du cรขblage du module, du format d'adresse ou de la maniรจre dont la page est servie, plutรดt que de la directive elle-mรชme.
- La zone d'affichage reste vide : le
ngRouteLe module n'a pas รฉtรฉ rรฉpertoriรฉ comme dรฉpendance, ouangular-route.jsn'a pas รฉtรฉ chargรฉ. Les deux sont requis, et le script doit รชtre exรฉcutรฉ aprรจsangular.min.js. - Les liens modifient l'adresse mais rien ne s'affiche : L'attribut href ne correspond pas ร la route. ร partir d'AngularJS 1.6, l'adresse doit รชtre dรฉfinie.
#!/Route; ancien code รฉcrit pour la version 1.5 utilisรฉ#/Route. - Les modรจles ne peuvent pas รชtre chargรฉs en raison d'une erreur CORS : La page a รฉtรฉ ouverte directement depuis le disque. Servez-la via HTTP, car
templateUrlest rรฉcupรฉrรฉ par une requรชte AJAX, le protocole de fichier est bloquรฉ. - Seule la derniรจre vue apparaรฎt : Plusieurs รฉlรฉments peuvent contenir l'attribut ng-view. AngularJS ne prend en charge qu'une seule zone d'affichage par page.
- Rien ne s'affiche au premier chargement : aucune
otherwiseLa clause est configurรฉe de telle sorte qu'une adresse vide ne correspond ร aucun itinรฉraire.










