Mon problème est assez classique. J'ai une partie privée d'une application qui se trouve derrière un fichier login form
. Lorsque la connexion est réussie, elle est dirigée vers une route enfant pour l'application d'administration.
Mon problème est que je ne peux pas utiliser le global navigation menu
car le routeur essaie de router dans mon AdminComponent
au lieu de mon AppCompoment
. Donc ma navigation est interrompue.
Un autre problème est que si quelqu'un veut accéder directement à l'URL, je veux rediriger vers la route de «connexion» parente. Mais je ne peux pas le faire fonctionner. Il me semble que ces deux problèmes sont similaires.
Une idée de la façon dont cela peut être fait?
angular
angular-routing
angular-router
Carl Boisvert
la source
la source
Réponses:
Voulez-vous un lien / HTML ou voulez-vous router impérativement / en code?
Lien : la directive RouterLink traite toujours le lien fourni comme un delta de l'URL actuelle:
[routerLink]="['/absolute']" [routerLink]="['../../parent']" [routerLink]="['../sibling']" [routerLink]="['./child']" // or [routerLink]="['child']" // with route param ../../parent;abc=xyz [routerLink]="['../../parent', {abc: 'xyz'}]" // with query param and fragment ../../parent?p1=value1&p2=v2#frag [routerLink]="['../../parent']" [queryParams]="{p1: 'value', p2: 'v2'}" fragment="frag"
Avec RouterLink, n'oubliez pas d'importer et d'utiliser la
directives
baie:import { ROUTER_DIRECTIVES } from '@angular/router'; @Component({ directives: [ROUTER_DIRECTIVES],
Impératif : La
navigate()
méthode nécessite un point de départ (c'est-à-dire lerelativeTo
paramètre). Si aucun n'est fourni, la navigation est absolue:import { Router, ActivatedRoute } from '@angular/router'; ... constructor(private router: Router, private route: ActivatedRoute) {} ... this.router.navigate(["/absolute/path"]); this.router.navigate(["../../parent"], {relativeTo: this.route}); this.router.navigate(["../sibling"], {relativeTo: this.route}); this.router.navigate(["./child"], {relativeTo: this.route}); // or this.router.navigate(["child"], {relativeTo: this.route}); // with route param ../../parent;abc=xyz this.router.navigate(["../../parent", {abc: 'xyz'}], {relativeTo: this.route}); // with query param and fragment ../../parent?p1=value1&p2=v2#frag this.router.navigate(["../../parent"], {relativeTo: this.route, queryParams: {p1: 'value', p2: 'v2'}, fragment: 'frag'}); // navigate without updating the URL this.router.navigate(["../../parent"], {relativeTo: this.route, skipLocationChange: true});
la source
router.navigate(string)
méthode ne semble pas exister dans la version actuelle d'Angular (2.2). J'ai cherché dans les documents et je n'ai trouvé quenavigate(commands: any[], extras?: NavigationExtras) : Promise<boolean>
. Ou est-ce que je manque totalement quelque chose?relativeTo
données lorsque vous utilisez [routerLink] dans le html au lieu de dactylographié?../../../
au lieu de../
pour naviguer vers le parent ('/users'
de'/users/1'
).Cela semble fonctionner pour moi au printemps 2017:
Où votre composant ctor accepte
ActivatedRoute
etRouter
, importé comme suit:import { ActivatedRoute, Router } from '@angular/router';
la source
parentPath
'work: queue' (qui a des enfants) et lesdits enfants chargent le module enfant avec des paramètres.fullCurrentPath
: 'travail / expédition / module / liste'. Le code ci-dessus ne peut pas charger àparentPath
partir defullCurrentPath
.Vous pouvez accéder à votre racine parent comme ceci
Vous devrez injecter la Route active actuelle dans le constructeur
la source
this.router.navigate(['.'], {relativeTo: this.activeRoute.parent});
fonctionnera correctement dans un cas, lorsque vous utilisez le même composant dans deux chemins: / users / create et / users / edit / 123. Dans les deux cas, il accédera aux parents / utilisateurs. La navigation régulière avecthis.router.navigate([".."], {relativeTo: this.activeRoute})
ne fonctionnera que pour les utilisateurs / create, mais ne fonctionnera pas pour les utilisateurs / edit / 123 car elle naviguera vers non-existant / users / edit / route.Le routeur prend en charge
/xxx
- démarrés sur le routeur du composant racinexxx
- démarrés sur le routeur du composant actuel../xxx
- démarrés sur le routeur parent du composant actuella source
../
c'est assez bien connu, mais au final c'est toujours ambigu. Merci pour l'indice.Pour naviguer vers le composant parent quel que soit le nombre de paramètres de l'itinéraire actuel ou de l'itinéraire parent: Mise à jour angulaire 6 1/21/19
Cela a l'avantage supplémentaire d'être une route absolue que vous pouvez utiliser avec le routeur singleton.
(Angular 4+ bien sûr, probablement Angular 2 aussi.)
la source
this._router.navigate([])
, whilethis._router.navigate([[]])
prend la route parente, si et seulement si la route parente n'est pas racine elle-même.Une autre façon pourrait être comme ça
et voici le constructeur
la source
sans trop tarder:
le paramètre '..' rend la navigation d'un niveau supérieur, c'est-à-dire parent :)
la source
Mes itinéraires ont un modèle comme celui-ci:
Lorsque je suis sur la page Modifier, par exemple, et que j'ai besoin de revenir à la page de liste, je reviendrai 2 niveaux plus haut sur l'itinéraire.
En y réfléchissant, j'ai créé ma méthode avec un paramètre "level".
Donc, pour passer de l'édition à la liste, j'appelle la méthode comme ça:
la source
ajouter un emplacement à votre constructeur à partir de
@angular/common
ajoutez la fonction de retour:
et ensuite à votre avis:
la source
Si vous utilisez la directive uiSref, vous pouvez le faire
la source
Ma solution est:
Et l'
Router
injection:la source