我正在使用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完全忽略路径?
我认为这是不可能的(或者至少不应该这样做,请参见下文)。单页应用程序的要点是它处理其路由,即。没有页面加载,但是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。
这里是一个计划,您也许仍然可以实现您所描述的内容,但这不是很好,并且可能不值得进行复杂操作:
index.html
,除非特别请求了json,在这种情况下,返回jsonlocation.reload(true)
,这将导致浏览器向网络服务器发送新请求,而网络服务器将提供jsonlocation.reload(true)
中的页面重新加载