首页 > 解决方案 > 带隐藏路径的路由

问题描述

我有这个基本路线:

const appRoutes: Routes = [
  {
    path: 'login',
    component: LoginComponent
  },
  {
    path: '',
    component: WidgetComponent
  },
  {
    path: 'P3',
    component: DashboardComponent
  },
  {
    path: 'NN',
    component: DashboardComponent
  },
  {
      path: '**',
      redirectTo: ''
  }
];

它工作得很好。当我导航到.../p3它时,加载我的组件。

现在,加载的 url 不仅仅是上面的这个。但是这样的事情:

localhost:4200/P3?p1=hello&p2=world

但它仍然可以在serve.

当我构建应用程序并发布它时,我遇到了这个问题:通过直接导航到localhost:4200/P3?p1=hello&p2=world服务器响应是 a This page cannot be found on the server,我设法理解这就是P3问题所在。所以我HashLocationStrategy在我的模块中添加了:

{ provide: LocationStrategy, useClass: HashLocationStrategy },

所以现在我的网址是这样的:

<server>/#/P3?p1=hello&p2=world

这解决了我的问题。

我的问题是:有没有更好的方法来做到这一点?我在想,是否可以只隐藏P3在网址中?我在文档中看到 skipLocationChange: true要设置为路线,NavigationExtras但它并不让我满意。

有人有想法吗?

标签: angularrouting

解决方案


PathLocationStrategy最容易接受的默认定位策略。这是default strategyAngular 中的,并利用了新的HTML5API 调用pushstate(来自 HTML5 历史 API)。添加#到 url 中会产生一点噪音。所以避免HashLocationStrategy

如果您对此有疑问,那么您可能没有添加基本 href。只需检查head您的部分index.html

<base href="/app"/>

推荐阅读