忽略根RouterModule中的路径

问题描述 投票:0回答:2

我正在使用Angular9。我在根目录中有一个不希望包含在应用程序中的JSON文件。换句话说:

/src
  |-- /app
  |-- /assets
  |-- index.html
  |-- do_not_include_this_file.json

这意味着http://example.com/do_not_include_this_file.json应该被RouterModule忽略,而直接进入文件。目前,该路径将重定向到PageNotFoundComponent,例如

export const APP_ROUTER_PROVIDERS: Routes = [
    { path: 'login', component: LoginComponent },
    { path: '', redirectTo: '/login', pathMatch: 'full' },
    { path: '**', component: PageNotFoundComponent }
];

如何使RouterModule完全忽略路径?

angular angular-router
2个回答
1
投票

我认为这是不可能的(或者至少不应该这样做,请参见下文)。单页应用程序的要点是它处理其路由,即。没有页面加载,但是SPA会读取URL中的内容,并显示符合您的路由器配置的组件。实际上,这不是特定于角度的,即使每个SPA的抽象与路由器和组件的抽象都不一样,每个SPA都像这样工作。您要执行的操作与此完全相反。

此外,为了使SPA正常工作,它们还需要特定的Web服务器配置:对于baseHref下的每个URL,必须返回index.html。这样就可以使书签和页面重新加载工作,因为可以想象用户是否为myapp.com/profile/settings添加了书签。 SPA的代码链接在index.html中,并且必须加载它,以便代码可以决定URL为profile/settings时显示的内容。同样,当用户加载myapp.com/profile/settings时,Web服务器将返回index.html,就像请求是myapp.com/index.html一样。 SPA加载后,它将检查URL,并相应显示页面或组件。如果未设置此机制,则无法直接转到/profile/settings,但必须先打开myapp.com/index.html(或也许是myapp.com/),然后手动导航至SPA中的配置文件设置。

现在想像您想要的还需要在Web服务器中对此机制进行显式例外,因为在打开myapp.com/my-fancy.json时,Web服务器必须创建一个例外并实际提供json。

这里是一个计划,您也许仍然可以实现您所描述的内容,但这不是很好,并且可能不值得进行复杂操作:

  • 在您的Web服务器的路由中实现此异常,以便始终返回index.html,除非特别请求了json,在这种情况下,返回json
  • 为json文件创建路由和组件,并且当您导航到该URL且该组件已加载时,只需调用location.reload(true),这将导致浏览器向网络服务器发送新请求,而网络服务器将提供json
    • 或者,用于json的url的组件可能是一个空的占位符,您可以捕获导航并触发location.reload(true)中的页面重新加载

0
投票

将您的json文件移动到资产。

在您要忽略的路由配置jsonfile路由中。

route guard
© www.soinside.com 2019 - 2024. All rights reserved.