【问题标题】:Angular 4 redirects to root path when browser reloads浏览器重新加载时Angular 4重定向到根路径
【发布时间】:2018-08-07 17:10:48
【问题描述】:

当前页面为http://localhost:4200/foo

案例1:如果我按下浏览器的重新加载按钮或在浏览器中输入相同的url,页面将重定向到http://localhost:4200(根路径)。

我希望页面保持相同的网址 (http://localhost:4200/foo)。

案例 2:如果我输入 http://localhost:4200/foo(相同的 url),页面将重定向到 http://localhost:4200(根路径)。

我还希望页面保留在我输入的相同网址中 (http://localhost:4200/foo)。

否则,如果页面是http://localhost:4200,我输入http://localhost:4200/foo,它工作正常。我可以正常通过 url 路径导航。问题只是当我走同一条路时。

我在 app.module.ts 中的根路径是:

const rootRouting: ModuleWithProviders = RouterModule.forRoot([
    {
        path: 'foo',
        loadChildren: './foo/foo.module#FooModule'
    },
    {
        path: '',
        loadChildren: './bar/bar.module#BarModule'
    },
], { });

而我在 foo.module.ts 中的路径是:

    const fooRouting: ModuleWithProviders = RouterModule.forChild([
      {
        path: 'foo',
        component: FooComponent
      }
    ]);

OBS:这个问题Angular 5 - redirect page to homepage on browser refresh 与我的正好相反。现在,我不知道这种情况下 Angular 的默认行为是什么。

DiPix 修正后编辑:

我在 app.module.ts 中的根路径是:

const rootRouting: ModuleWithProviders = RouterModule.forRoot([
    {
        path: 'foo',
        loadChildren: './foo/foo.module#FooModule'
    },
    {
        path: '',
        loadChildren: './bar/bar.module#BarModule'
    },
], { });

而我在 foo.module.ts 中的路径是:

    const fooRouting: ModuleWithProviders = RouterModule.forChild([
      {
        path: '',
        pathMatch: 'full',
        component: FooComponent
      }
    ]);

编辑 2:

用谷歌浏览器调试,我设置了“保留日志”。

使用任何其他站点进行测试,如果您位于“www.anydomain.com/path”并重新加载浏览器,则 chrome 会写入 "Navigated to 'www.anydomain.com/path'

使用我的应用程序进行测试,如果我在“http://localhost:4200/foo”并重新加载浏览器,chrome 会写入"Navigated to 'http://localhost:4200/'

浏览器导航到根路径!

【问题讨论】:

  • 您似乎没有设置任何根路由。找到根路径后找到子根。因此,您可以简单地为 '' 设置根路由,并将您的子路由用于通往该路径的子路由。 - angular.io/guide/router
  • @Igor 您能否检查一下您在应用程序中使用的任何通用组件,并且您正在将用户重定向到“/”。
  • 我已经仔细检查过了。没有组件重定向到“/”。
  • 我从零开始创建了一个新项目,并且使用了不同的文件夹结构。那里一切正常。我把这个问题留在这里是因为我仍然对它为什么不起作用感到困惑..

标签: javascript angular angular4-router


【解决方案1】:

您需要在应用程序的根目录定义一些路由。像这样的:

const routes: Routes = [
  { path: 'foo', component: FooComponent},
  { path: '', redirectTo: '/foo', pathMatch: 'full' },
  { path: '**', component: FooComponent }
];

这些路由将转到您定义 forRoot() 方法的位置,从您的代码来看,该方法如下所示:

const rootRouting: ModuleWithProviders = RouterModule.forRoot(routes);

【讨论】:

  • 我应用了你所说的。现在我的代码在 rootRouting 中有一些路径,在子模块中有子路径。我已经编辑了我的问题。问题还是一样
  • 我可以正常导航,但是当我重新加载页面时它会转到根路径
【解决方案2】:

您在 foo.module.ts 中有路径“foo”,这是可疑的。因为您已经在 app.module.ts 中声明了此路径。关键是如果你使用延迟加载,那么你不应该在 app.module 中导入 foo.module。检查您在 app.module 中的导入。我打赌你已经导入了这个模块。并且不要忘记在 foo.module.ts 中将路径更改为 ''

【讨论】:

  • 你是对的,我是在 app.module 中导入 foo.module,所以我已经更正它并更改了 fooRouting。
  • 但是,问题仍然存在。当我重新加载页面时,它会进入根路径
猜你喜欢
  • 2015-10-03
  • 2020-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-21
  • 1970-01-01
  • 2021-11-29
  • 1970-01-01
相关资源
最近更新 更多