Meu problema é bastante clássico. Eu tenho uma parte privada de um aplicativo que está por trás de um login form
. Quando o login é bem-sucedido, ele segue para uma rota secundária do aplicativo admin.
Meu problema é que não consigo usar o global navigation menu
porque o roteador tenta rotear no meu em AdminComponent
vez do meu AppCompoment
. Então minha navegação está quebrada.
Outro problema é que, se alguém deseja acessar a URL diretamente, desejo redirecionar para a rota de "login" pai. Mas não consigo fazer funcionar. Parece-me que essas duas questões são semelhantes.
Alguma ideia de como isso pode ser feito?
angular
angular-routing
angular-router
Carl Boisvert
fonte
fonte
Respostas:
Você quer um link / HTML ou deseja rotear imperativamente / no código?
Link : A diretiva RouterLink sempre trata o link fornecido como um delta para o URL atual:
[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"
Com o RouterLink, lembre-se de importar e usar a
directives
matriz:import { ROUTER_DIRECTIVES } from '@angular/router'; @Component({ directives: [ROUTER_DIRECTIVES],
Imperativo : o
navigate()
método requer um ponto de partida (ou seja, orelativeTo
parâmetro). Se nenhum for fornecido, a navegação é 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});
fonte
router.navigate(string)
método não parece existir na versão atual do Angular (2.2). Procurei na docs e apenas encontreinavigate(commands: any[], extras?: NavigationExtras) : Promise<boolean>
. Ou estou totalmente perdendo alguma coisa?relativeTo
dados quando você está usando [routerLink] no html em vez de typescript?../../../
vez de../
para navegar até o pai ('/users'
de'/users/1'
).Isso parece funcionar para mim a partir da primavera de 2017:
Onde seu ctor de componente aceita
ActivatedRoute
eRouter
, importado da seguinte maneira:import { ActivatedRoute, Router } from '@angular/router';
fonte
parentPath
'work: queue' (que tem filhos) e esses filhos carregam o módulo filho com parâmetros.fullCurrentPath
: 'trabalho / envio / módulo / lista'. O código acima não pode carregarparentPath
a partirfullCurrentPath
.Você pode navegar até sua raiz principal assim
Você precisará injetar a rota ativa atual no construtor
fonte
this.router.navigate(['.'], {relativeTo: this.activeRoute.parent});
funcionará corretamente em um caso, quando você usa o mesmo componente em dois caminhos: / users / create e / users / edit / 123. Em ambos os casos, ele navegará para pais / usuários. A navegação regular comthis.router.navigate([".."], {relativeTo: this.activeRoute})
funcionará apenas para os usuários / criar, mas não funcionará para os usuários / editar / 123 porque navegará para / usuários / editar / não existentes.O roteador suporta
/xxx
- iniciado no roteador do componente raizxxx
- iniciado no roteador do componente atual../xxx
- iniciados no roteador pai do componente atualfonte
../
fosse bem conhecido, mas no final ainda é ambíguo. Obrigado pela dica.Para navegar até o componente pai , independentemente do número de parâmetros na rota atual ou na rota pai: Atualização do Angular 6 em 21/01/19
Isso tem a vantagem adicional de ser uma rota absoluta que você pode usar com o roteador singleton.
(Angular 4+ com certeza, provavelmente Angular 2 também.)
fonte
this._router.navigate([])
, enquantothis._router.navigate([[]])
leva para a rota primária, se e somente se a rota primária não for o próprio root.Outra maneira poderia ser assim
e aqui está o construtor
fonte
sem muito trabalho:
parâmetro '..' torna a navegação um nível acima, ou seja, pai :)
fonte
Minhas rotas têm um padrão assim:
Quando estou na página de edição, por exemplo, e preciso voltar para a página da lista, irei retornar 2 níveis acima na rota.
Pensando nisso, criei meu método com um parâmetro "level".
Então, para ir da edição à lista, chamo o método assim:
fonte
Se você estiver usando a diretiva uiSref, você pode fazer isso
fonte
Minha solução é:
E a
Router
injeção:fonte
Nada disso funcionou para mim ... Eu tive que usar:
fonte
adicione localização ao seu construtor de
@angular/common
adicione a função back:
e então na sua visão:
fonte