angular-cli Firebase 托管 Angular 2 路由器不工作

angular-cli Firebase hosting Angular 2 router not working

我正在尝试使用 Firebase 托管一个 angular 2 应用程序(使用 angular cli 创建),但我的路由不起作用。

我使用 angular 2 和打字稿为我正在工作的网站创建了一个项目,我想要一个静态隐私政策页面。

当我表演时

ng serve

并在我的浏览器中导航到 http://localhost:4200/privacy-policy 我得到了我期望的内容。

这里是angular2路由页面推荐的代码-

@NgModule({
    declarations: [
        AppComponent,
        HomeComponent,
        TermsOfServiceComponent,
        PrivacyPolicyComponent,
        PageNotFoundComponent
    ],
    imports: [
        AlertModule,
        BrowserModule,
        FormsModule,
        HttpModule,
        RouterModule.forRoot([
            {path: 'privacy-policy', component: PrivacyPolicyComponent},
            {path: 'terms-of-service', component: TermsOfServiceComponent},
            {path: '', component: HomeComponent},
            {path: '**', component: PageNotFoundComponent}
        ])
    ],
    providers: [],
    bootstrap: [AppComponent]
})
export class AppModule {
}

我用我的项目配置了 Firebase 托管,这里是我的配置文件-

{
  "database": {
    "rules": "database.rules.json"
  },
  "hosting": {
    "public": "dist"
  }
}

部署我运行

ng build --prod
firebase deploy

当我导航到 https://MY-APP.firebaseapp.com/ 该应用程序可以正常加载默认路由。

但是当我尝试导航到 https://MY-APP.firebaseapp.com/privacy-policy 我得到 404。

我原以为它会像 ng serve 那样工作。

如有任何帮助,我们将不胜感激。

在您的 app.module.ts 文件中添加以下内容:

声明

import { LocationStrategy, HashLocationStrategy} from '@angular/common';

并在提供商中添加以下内容

   @NgModule({
        declarations: [...],
        imports:[...],
        providers:[..,{ provide: LocationStrategy, useClass: HashLocationStrategy },..]
        ...,
    })

希望这能解决您的问题。

如果可能,请将您的路线保存在单独的文件中。

干杯

回复晚了,但由于我今天在 Firebase 上部署我的应用程序时遇到了同样的问题,这里是它的快速修复:

在您的 firebase.json 文件中,通过定义 rewrite 规则更新您的托管密钥:

  "hosting": {
    "public": "dist",
    "rewrites": [ {
      "source": "**",
      "destination": "/index.html"
    } ]
  }

打开firebase.json

如果你有这个:

    "ignore": [
  "firebase.json",
  "**/.*",
  "**/node_modules/**"
]

删除 **/.* 行

所以你有这个:

"ignore": [
  "firebase.json",
  "**/node_modules/**"
]

留给我这个并工作:

    {
  "database": {
    "rules": "database.rules.json"
  },
  "firestore": {
    "rules": "firestore.rules",
    "indexes": "firestore.indexes.json"
  },
  "hosting": {
    "public": "dist",
    "rewrites": [ {
      "source": "**",
      "destination": "/index.html"
    } ],
    "ignore": [
      "firebase.json",
      "**/node_modules/**"
    ]
  }
}

我在 Angular 8,这对我有用

ng 构建 --prod 火力基地部署

我的 firebase.json 文件也如下所示:

    {
        "hosting": {
         "public": "dist/crm",
         "ignore": [
            "firebase.json",
            "**/.*",
            "**/node_modules/**"
         ],
         "rewrites": [
          {
            "source": "**",
            "destination": "/index.html"
          }
        ]
      }
    }

在dist/crm中,crm 是项目文件夹的名称。我希望它有所帮助。