angular-cli Firebase托管Angular 2路由器无法正常工作

时间:2016-11-15 05:08:21

标签: angular firebase firebase-hosting

我正在尝试使用Firebase托管一个角度2应用程序(使用angular cli创建),但我的路线无效。

我为我正在处理的网站创建了一个带有角度2和打字稿的项目,我想要一个静态隐私策略页面。

当我表演时

ng serve

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

以下是角度2路线页面建议的代码 -

@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服务一样工作。

非常感谢任何帮助。

4 个答案:

答案 0 :(得分:31)

迟到的回复,但是因为我今天遇到了同样的问题,当我在Firebase上部署我的应用时,这里是快速修复它:

firebase.json 文件中,通过定义重写规则来更新您的主机密钥:

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

答案 1 :(得分:12)

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

声明

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

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

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

希望这能解决您的问题。

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

干杯

答案 2 :(得分:0)

打开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/**"
    ]
  }
}

答案 3 :(得分:0)

我使用的是Angular 8,这对我有用

ng build --prod Firebase部署

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

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

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