Angular動態修改網頁圖標(favicon)與標題
前言
在一Angular APP中若有不同功能導向的服務,希望在不同頁面時可以載入不同favicon與標題
修改標題還算簡單,Angular原生就提供服務,直接注入馬上使用就好
但圖標(facicon)就沒那麼好了,不過自己實作也算簡單,就是最基本的操作dom來改變就好
作法
第一步:在index.html
中,將圖標加上id屬性
<link id="appFavicon" rel="icon" type="image/x-icon" href="favicon.ico">
第二步:將欲改變的圖標放入assets的目錄裡
比如共有faviconA.ico、faviconB.ico、faviconC.ico共三個icon要動態變換
則將3個圖標都放進去
也就是ng serve
啟動後,輸入http://localhost:4200/assets/faviconA.ico
至少要能看得到圖片
※Angular預設port是4200,網址會依您服務設定的port而有所不同
第三步:在app.module.ts注入title服務 (若不打算變更標題,可跳過此步)
若不打算變更標題,可跳過此步
import { NgModule } from '@angular/core';
+import { BrowserModule, Title } from '@angular/platform-browser';
import { AppComponent } from './app.component';
@NgModule({
imports: [
BrowserModule
],
declarations: [
AppComponent
],
+ providers: [
+ Title
+ ],
bootstrap: [ AppComponent ]
})
export class AppModule { }
第四步:在要載入的component,寫在ngOnInit
component最上方先匯入Angular模組
Title為Angular原生提供用於修改標題的service
DOCUMENT則是Angular提供用來操作dom的功能
import { DOCUMENT, Title } from "@angular/platform-browser";
在constructor
注入服務後,接著在ngOnInit()
裡寫上功能
@Component({
selector: "home",
templateUrl: "./home.component.html",
styles: ["./home.component.css"]
})
export class HomeComponent implements OnInit {
constructor(
@Inject(DOCUMENT) private doc,
private titleService: Title // 不打算修改標題的話,不必注入
) {}
ngOnInit() {
this.titleService.setTitle("動態修改title!"); // 不想要修改標題的話,刪除此行
this.doc
.getElementById("appFavicon")
.setAttribute("href", "/assets/faviconA.ico");
}
}
參考資料
stackoverflow/Change favicon icon as per configuration
Angular官方文件/動態調整title