Affichage de plusieurs itinéraires dans des points de vente nommés
Vous décidez de donner aux utilisateurs un moyen de contacter le centre de crise. Lorsqu'un utilisateur clique sur un bouton "Contact",
vous souhaitez afficher un message dans une vue contextuelle.
La fenêtre contextuelle doit rester ouverte, même lors du basculement entre les pages de l'application, jusqu'à ce que l'utilisateur la
ferme en envoyant le message ou en l'annulant. Clairement, vous ne pouvez pas mettre le popup dans la même sortie que les autres pages.
Jusqu'à présent, vous avez défini un seul point de vente et vous avez imbriqué des itinéraires enfants sous ce point de vente pour les regrouper.
Le routeur ne prend en charge qu'une seule prise principale non nommée par modèle.
Un modèle peut également avoir un nombre quelconque de points de vente nommés . Chaque sortie nommée a son propre ensemble de routes avec leurs propres composants.
Plusieurs points de vente peuvent afficher différents contenus, déterminés par différents itinéraires, tous en même temps.
Ajoutez un point de vente nommé "popup" dans le AppComponent, directement sous le point de vente non nommé.
src / app / app.component.html (points de vente)
C'est là qu'une fenêtre contextuelle ira une fois que vous aurez appris à y router un de ses composants.
Routes secondaires
Les points de vente nommés sont les cibles des itinéraires secondaires.
Les itinéraires secondaires ressemblent aux itinéraires principaux et vous les configurez de la même manière.
Ils diffèrent à plusieurs égards.
- Ils sont indépendants les uns des autres.
- Ils travaillent en combinaison avec d'autres itinéraires.
- Ils sont affichés dans des points de vente nommés.
Générez un nouveau composant pour composer le message.
Il affiche un simple formulaire avec un en-tête, une zone de saisie pour le message et deux boutons, "Envoyer" et "Annuler".
src / app / compose-message / compose-message.component.css
src / app / compose-message / compose-message.component.html
src / app / compose-message / compose-message.component.ts
Cela ressemble à peu près à tous les autres composants que vous avez vus dans ce guide. Il y a deux différences notables.
Notez que la send()méthode simule le temps de latence en attendant une seconde avant "d'envoyer" le message et de fermer le popup.
La closePopup()méthode ferme la vue contextuelle en accédant à la sortie contextuelle avec a null. C'est une particularité couverte ci-dessous .
Ajouter un route secondaire
Ouvrez le AppRoutingModuleet ajoutez un nouvel composeitinéraire au appRoutes.
src / app / app-routing.module.ts (route de composition)
Les propriétés pathet componentdoivent être familières. Il y a une nouvelle propriété outlet, définie sur 'popup'.
Cet itinéraire cible maintenant la sortie contextuelle et le ComposeMessageComponentsera affiché à cet endroit.
L'utilisateur a besoin d'un moyen d'ouvrir la fenêtre contextuelle. Ouvrez le AppComponentet ajoutez un lien "Contact".
src / app / app.component.html (lien de contact)
Bien que la composeroute soit épinglée à la sortie "popup", cela ne suffit pas pour connecter la route à une RouterLinkdirective.
Vous devez spécifier la sortie nommée dans un tableau de paramètres de lien et la lier à la RouterLinkliaison avec une propriété.
Le tableau des paramètres de liaison contient un objet avec une outletspropriété unique dont la valeur est un autre objet associé à un (ou plusieurs) nom de prise.
Dans ce cas, il n'y a que la propriété de sortie "popup" et sa valeur est un autre tableau de paramètres de lien qui spécifie la composeroute.
Vous dites effectivement que lorsque l'utilisateur clique sur ce lien, affiche le composant associé à la composeroute dans le popuppoint de vente .
Cet outletsobjet à l'intérieur d'un objet extérieur était totalement inutile lorsqu'il n'y avait qu'une seule route et un seul débouché non nommé à considérer.
Le routeur a supposé que votre spécification d'itinéraire ciblait le point de vente principal non nommé et a créé ces objets pour vous.
Le routage vers une sortie nommée a révélé une vérité de routeur auparavant cachée: vous pouvez cibler plusieurs prises avec
plusieurs routes dans la même RouterLinkdirective.
Vous ne le faites pas réellement ici. Mais pour cibler un point de vente nommé, vous devez utiliser la syntaxe la plus riche et la plus détaillée.
Navigation secondaire: fusion des itinéraires pendant le navigation
Accédez au centre de crise et cliquez sur "Contact". vous devriez voir quelque chose comme l'URL suivante dans la barre d'adresse du navigateur.
La partie intéressante de l'URL suit le ...:
- La crisis-centerest la navigation principale.
- Les parenthèses entourent la route secondaire.
- La voie secondaire comprend un nom de prise (popup), un colonséparateur et le chemin de voie secondaire (compose).
Cliquez sur le lien Heroes et regardez à nouveau l'URL.
La partie de navigation principale a changé; la voie secondaire est la même.
Le routeur garde trace de deux branches distinctes dans une arborescence de navigation et génère une représentation de cette arborescence dans l'URL.
Vous pouvez ajouter de nombreux autres points de vente et itinéraires, au niveau supérieur et aux niveaux imbriqués,
en créant un arbre de navigation comportant de nombreuses branches. Le routeur générera l'URL qui va avec.
Vous pouvez demander au routeur de parcourir un arbre entier à la fois en remplissant l' outletsobjet mentionné ci-dessus.
Puis passez cet objet dans un tableau de paramètres de liens à la router.navigateméthode.
Expérimentez ces possibilités à votre guise.
Suppression des routes secondaires
Comme vous l'avez appris, un composant d'un point de vente persiste jusqu'à ce que vous vous dirigiez vers un nouveau composant.
Les points de vente secondaires ne sont pas différents à cet égard.
Chaque point de vente secondaire a sa propre navigation, indépendante de la navigation conduisant au point de vente principal.
La modification d'un itinéraire actuel qui s'affiche dans le point de vente principal n'a aucun effet sur le point de vente contextuel.
C'est pourquoi le popup reste visible lorsque vous naviguez parmi les crises et les héros.
En cliquant sur les boutons "envoyer" ou "annuler" n'effacer la vue popup.
Pour voir comment, regardez à nouveau la méthode : closePopup()
src / app / compose-message / compose-message.component.ts (closePopup)
Il navigue impérativement avec la Router.navigate()méthode, en passant un tableau de paramètres de liens .
Comme le tableau lié au contact RouterLink dans le AppComponent, celui-ci inclut un objet avec une outletspropriété.
La outletsvaleur de la propriété est un autre objet avec des noms de sortie pour les clés.
La seule sortie nommée est 'popup'.
Cette fois, la valeur de 'popup'est null. Ce n'est pas un itinéraire, mais c'est une valeur légitime. Définir la fenêtre contextuelle
RouterOutletpour nulleffacer la prise et supprimer la route contextuelle secondaire de l'URL actuelle.