我有此路由配置,并且可以正常运行,只有一件事使我烦恼:即使导航应用程序有效,当我转到地址栏并按Enter键时,即使我没有更改,它也将我重定向到/ dashboard网址,然后按Enter。
这是我的路线配置:
import { Routes } from '@angular/router';
import { FullComponent } from './layouts/full/full.component';
export const Approutes: Routes = [
{
path: '',
component: FullComponent,
children: [
{
path: 'usuarios',
loadChildren: './pages/usuarios/usuarios.module#UsuariosModule'
},
{
path: 'autores',
loadChildren: './pages/autores/autores.module#AutoresModule'
},
{
path: 'conteudos',
loadChildren: './pages/conteudos/conteudos.module#ConteudosModule'
},
{
path: 'projetos',
loadChildren: './pages/projetos/projetos.module#ProjetosModule'
},
{
path: 'dashboard',
loadChildren: './pages/dashboard/dashboard.module#DashboardModule'
},
]
},
{
path: 'login',
loadChildren: './pages/login/login.module#LoginModule'
},
{
path: '',
redirectTo: '/dashboard',
pathMatch: 'full'
}
];
我注意到的另一件事是,当我按Enter键并观看我的网络时,我可以看到该页面的解析器被调用了,但是随后我被重定向到了/ dashboard。
谢谢大家。
编辑:有趣的是,我尝试完全删除仪表板路线,而仅保留其他路线,由于任何原因(或魔术),我的应用仍尝试到达仪表板路线,在一次调试中,我发现了类似“延迟路线加载”的内容。
编辑2:我最终进入路由器日志:“导航ID 1不等于当前导航ID 2”,然后我一直在挣扎并决定更改我的路由器模块,而不是返回const并在AppModule上调用RouterModule.forRoot(Approutes)我改为:
import { Routes, RouterModule } from '@angular/router';
import { FullComponent } from './layouts/full/full.component';
import { NgModule } from '@angular/core';
const routes: Routes = [
{
path: '',
component: FullComponent,
children: [
{
path: 'dashboard',
loadChildren: './pages/dashboard/dashboard.module#DashboardModule'
},
{
path: 'usuarios',
loadChildren: './pages/usuarios/usuarios.module#UsuariosModule'
},
{
path: 'autores',
loadChildren: './pages/autores/autores.module#AutoresModule'
},
{
path: 'conteudos',
loadChildren: './pages/conteudos/conteudos.module#ConteudosModule'
},
{
path: 'projetos',
loadChildren: './pages/projetos/projetos.module#ProjetosModule'
}
]
},
{
path: 'login',
loadChildren: './pages/login/login.module#LoginModule'
}
];
@NgModule({
imports: [RouterModule.forRoot(routes, {enableTracing: true})],
exports: [RouterModule]
})
export class AppRoutingModule { }
但是一开始它没有解决,并且基于我在上面提到的日志中遇到的错误,我想知道我的解决方案是否搞砸了。
在子路线中,我有类似的东西:
const routes: Routes = [
{
path: '',
component: UsuariosIndexComponent,
resolve: {
paginacao: UsuariosPageResolver
}
}
];
在我的解析器中,我有:
export class UsuariosPageResolver implements Resolve<any> {
pagina = 1;
itensPorPagina = 10;
filtro = '';
constructor(private usuariosService: UsuariosService) { }
resolve() {
return this.usuariosService.paginar(this.pagina, this.itensPorPagina, this.filtro);
}
}
事实是,当我更改路线并注释了resolve调用时,它起作用了,但是当我取消注释该解决方案时,它仍然起作用:)
我将继续观看此视频,任何新结果将对此进行编辑。
Edit3:最新消息,即使我没有实现与AuthGuard或拦截器有关的任何东西,也没有类似的东西,但登录时会发生错误,如果我清除了站点数据,则它可以再次工作。
答案 0 :(得分:1)
您定义了两个相同的路径,一个用于FullComponent
,另一个用于重定向到仪表板:
path: '', <---------------------- Empty path
component: FullComponent,
children: [ ... ]
},
{
path: '', <---------------------- Empty path
redirectTo: '/dashboard',
pathMatch: 'full'
}
您是否打算在上一个路由定义中将用户重定向到dashboard
进行未知路由?如果是这样,则需要使用**
通配符:
{
path: '**',
redirectTo: '/dashboard',
pathMatch: 'full'
}
答案 1 :(得分:0)
谁能猜到?
我的问题与路线无关,它是一种控制自增强的服务,我错误地向构造函数赋予了错误的条件:
if (loggedUser !== null) ths.router.navigateToUrl('/dashboard');
因此,当我登录并浏览菜单时,它运行良好,但是当我单击重新加载或手动输入URL时,我们会收到“错误”(或功能,大声笑),因为再次调用了构造函数,然后发生了重定向
在我的辩护中,这一切都是因为我禁用了所有应用程序的安全性以加快测试速度,但是在此期间被吸了足够的时间以致失去了一些头发。
好,谢谢大家。
答案 2 :(得分:0)
表示某些防护服务由于某些错误而阻止。
您可以从路由文件中一一删除guard,以识别确切的guard文件。然后调试为什么那个守卫不允许。
注意:您用于在警卫内部验证的数据在警卫检查执行时不可用。当应用程序初始化时,您可能必须为这些数据做好准备。 (查看APPINITILIZER了解更多详情)