在浏览器中输入有效的url时,角度路由会不断重定向到起始位置

时间:2019-04-16 13:14:16

标签: angular angular7 angular-router

我有此路由配置,并且可以正常运行,只有一件事使我烦恼:即使导航应用程序有效,当我转到地址栏并按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或拦截器有关的任何东西,也没有类似的东西,但登录时会发生错误,如果我清除了站点数据,则它可以再次工作。

3 个答案:

答案 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了解更多详情)