Angular 忽略根RouterModule中的路径
我用的是角度9。我在根目录中有一个JSON文件,我不想将其包含在应用程序中。换言之:Angular 忽略根RouterModule中的路径,angular,angular-router,Angular,Angular Router,我用的是角度9。我在根目录中有一个JSON文件,我不想将其包含在应用程序中。换言之: /src |-- /app |-- /assets |-- index.html |-- do_not_include_this_file.json 这意味着http://example.com/do_not_include_this_file.json应该被RouterModule忽略,而直接转到该文件。当前,该路径将重定向到PageNotFoundComponent,例如 export-c
/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\u路由器\u提供程序:路由=[
{path:'login',component:LoginComponent},
{路径:'',重定向到:'/login',路径匹配:'full'},
{路径:'**',组件:PageNotFoundComponent}
];
如何使RouterModule完全忽略路径?编辑:这可能是错误的,请参阅其他答案
我认为这是不可能的(或者至少不应该这样做,见下文)。单页应用程序的要点是它处理其路由,即没有页面加载,但SPA读取URL中的内容,并根据路由器配置显示组件。这实际上并不是特定于角度的,每个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服务器的路由中实现此异常,以便始终返回
,除非特别请求该json,在这种情况下返回该jsonindex.html
- 为json文件创建一个路由和一个组件,当您导航到该URL并且该组件已加载时,只需调用即可,这将导致浏览器向Web服务器发送一个新请求,Web服务器将只提供json
- 或者,json url的组件可能是一个空占位符,您可以捕获导航并触发页面重新加载
{path: 'do_not_include_this_file.json',pathMatch: 'full', redirectTo: 'assets/do_not_include_this_file.json'}
您可以将根目录中的“do_not_include_this_file.json”作为静态文件提供
检查Angular应用程序的根目录,查找名为“Angular.json”的文件。在“angular.json”中,您可以使用资产实体。资产值数组中包含的任何文件或目录都将以静态方式提供。在这里添加静态文件。启用时,所有这些文件也将在生产环境中提供/复制到dist目录
下面的代码假设您的src文件夹中有“do_not_include_this_file.json”,并将其提供给输出中的根目录
这里有一个页面提供更多信息 这是应该在Web服务器级别执行的操作,例如,配置nginx/apache/IIS以直接为该文件提供服务。然而,这不是你在这里已经问过的问题吗(),你得到了答案但没有提供反馈?太好了。非常感谢。
"projects": {
"YourProject": {
"root": "",
...
"architect": {
"build": {
"builder": "@angular-devkit/build-angular:browser",
"options": {
...
"assets": [
...
{
"glob": "do_not_include_this_file.json",
"input": "src/",
"output": "/"
},
...
]