Angular9 <base href>

2020-07-08 13:45 更新

路由器使用瀏覽器的 history.pushState API 進行導航。借助 pushState 你自定義應用中的 URL 路徑 "localhost:4200/crisis-center",應用內的 URL 和服務器的 URL 沒有區(qū)別。

現代的 HTML5 瀏覽器都支持 pushState,這也就是為什么很多人把這種 URL 形式稱為 "HTML 5" 風格的 URL。

路由器默認使用 HTML5 風格的導航。 在 LocationStrategy 與瀏覽器 URL 風格部分,你可以了解為何推薦使用 HTML5 風格的 URL,如何調整其行為,以及必要時如何切換到老式的 hash(#)風格。

你必須在應用的 "index.html" 中添加一個 <base href> 元素才能讓 pushState 路由正常工作。 瀏覽器要用 <base href> 的值為引用 CSS、腳本和圖片文件時使用的相對 URL 添加前綴。

請把 <base> 元素添加在 <head> 標簽的緊后面。如果應用的根目錄是 "app" 目錄,那么就可以像這個應用程序一樣,設置 "index.html" 中的 href 值。代碼如下。

Path:"src/index.html (base-href)" 。

<base href="/">

HTML5 網址和 <base href>

由于路由器默認使用 “HTML 5 pushState” 風格,所以你必須用一個 <base href> 來配置該策略(Strategy)。

配置該策略的首選方式是往 "index.html" 的 <head> 中添加一個 <base href> element標簽。

Path:"src/index.html (base-href)" 。

<base href="/">

如果沒有該標記,瀏覽器就可能無法在“深度鏈接”進入應用時加載資源(圖片,CSS,腳本)。

有些開發(fā)人員可能無法添加 <base> 元素,這可能是因為它們沒有訪問 <head> 或 "index.html" 的權限。

它們仍然可以使用 HTML 5 格式的 URL,但要采取如下步驟進行補救:

用適當的[APP_BASE_HREF][]值提供(provide)路由器。

對所有 Web 資源使用絕對地址:CSS、圖片、腳本、模板 HTML。

HashLocationStrategy

你可以在根模塊的 RouterModule.forRoot() 的第二個參數中傳入一個帶有 useHash: true 的對象,以回到基于 HashLocationStrategy 的傳統方式。

Path:"src/app/app.module.ts (hash URL strategy)" 。

import { NgModule }             from '@angular/core';
import { BrowserModule }        from '@angular/platform-browser';
import { FormsModule }          from '@angular/forms';
import { Routes, RouterModule } from '@angular/router';


import { AppComponent }          from './app.component';
import { PageNotFoundComponent } from './page-not-found/page-not-found.component';


const routes: Routes = [


];


@NgModule({
  imports: [
    BrowserModule,
    FormsModule,
    RouterModule.forRoot(routes, { useHash: true })  // .../#/crisis-center/
  ],
  declarations: [
    AppComponent,
    PageNotFoundComponent
  ],
  providers: [


  ],
  bootstrap: [ AppComponent ]
})
export class AppModule { }
以上內容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號