Angular 忽略根RouterModule中的路径

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

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

将json文件移动到资产

在路由配置jsonfile中,您试图忽略的路由

 {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": "/"
              },
              ...
            ]