Mi problema es bastante clásico. Tengo una parte privada de una aplicación que está detrás de un login form
. Cuando el inicio de sesión es exitoso, se dirige a una ruta secundaria para la aplicación de administración.
Mi problema es que no puedo usar el global navigation menu
porque el enrutador intenta enrutar mi en AdminComponent
lugar de mi AppCompoment
. Entonces mi navegación está rota.
Otro problema es que si alguien quiere acceder a la URL directamente, quiero redirigir a la ruta de "inicio de sesión" principal. Pero no puedo hacer que funcione. Me parece que estas dos cuestiones son similares.
¿Alguna idea de cómo se puede hacer?
angular
angular-routing
angular-router
Carl Boisvert
fuente
fuente
Respuestas:
¿Quieres un enlace / HTML o quieres enrutar imperativamente / en código?
Enlace : la directiva RouterLink siempre trata el enlace proporcionado como un delta a la URL actual:
[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"
Con RouterLink, recuerde importar y usar la
directives
matriz:import { ROUTER_DIRECTIVES } from '@angular/router'; @Component({ directives: [ROUTER_DIRECTIVES],
Imperativo : el
navigate()
método requiere un punto de partida (es decir, elrelativeTo
parámetro). Si no se proporciona ninguno, la navegación es absoluta: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});
fuente
router.navigate(string)
método no parece existir en la versión actual de Angular (2.2). Busqué en los documentos y solo encontrénavigate(commands: any[], extras?: NavigationExtras) : Promise<boolean>
. ¿O me estoy perdiendo algo por completo?relativeTo
datos cuando se usa [routerLink] en html en lugar de mecanografiado?../../../
lugar de../
navegar a parent ('/users'
from'/users/1'
).Esto parece funcionar para mí a partir de la primavera de 2017:
Donde su componente ctor acepta
ActivatedRoute
eRouter
importa de la siguiente manera:import { ActivatedRoute, Router } from '@angular/router';
fuente
parentPath
'trabajo: cola' (que tiene hijos) y dijo que los hijos cargan el módulo hijo con parámetros.fullCurrentPath
: 'trabajo / envío / módulo / lista'. El código anterior no se puede cargarparentPath
desdefullCurrentPath
.Puede navegar a su raíz principal de esta manera
Deberá inyectar la ruta activa actual en el constructor
fuente
this.router.navigate(['.'], {relativeTo: this.activeRoute.parent});
funcionará correctamente en un caso, cuando use el mismo componente en dos rutas: / users / create y / users / edit / 123. En ambos casos, navegará a padres / usuarios. La navegación normal conthis.router.navigate([".."], {relativeTo: this.activeRoute})
funcionará solo para los usuarios / crear, pero no funcionará para los usuarios / editar / 123 porque navegará a no existente / usuarios / editar / ruta.El enrutador admite
/xxx
: iniciadas en el enrutador del componente raízxxx
: iniciadas en el enrutador del componente actual../xxx
: iniciadas en el enrutador principal del componente actualfuente
../
se conoce bastante bien, pero al final sigue siendo ambiguo. Gracias por la pista.Para navegar al componente principal independientemente del número de parámetros en la ruta actual o la ruta principal: Actualización de Angular 6 1/21/19
Esto tiene la ventaja adicional de ser una ruta absoluta que puede usar con el enrutador singleton.
(Angular 4+ seguro, probablemente Angular 2 también).
fuente
this._router.navigate([])
, whilethis._router.navigate([[]])
lleva a la ruta principal, si y solo si la ruta principal no es la raíz misma.Otra forma podría ser así
y aqui esta el constructor
fuente
sin mucho preámbulo:
el parámetro '..' hace que la navegación suba un nivel, es decir, padre :)
fuente
Mis rutas tienen un patrón como este:
Cuando estoy en la página Editar, por ejemplo, y necesito volver a la página de la lista, regresaré 2 niveles arriba en la ruta.
Pensando en eso, creé mi método con un parámetro de "nivel".
Entonces, para pasar de la edición a la lista, llamo al método así:
fuente
agregue Ubicación a su constructor desde
@angular/common
agregar la función de retroceso:
y luego en tu opinión:
fuente
Si está utilizando la directiva uiSref, puede hacer esto
fuente
Mi solucion es:
Y la
Router
inyección:fuente