1.Существующая ссылка CSS
Предположим, что ваш веб-шрифт является внешним CSS, например Google Font , Adobe Typekit или вашим собственным URL-адресом CSS.
В app.component.ts
,
import { Component } from '@angular/core';
import { DomSanitizer } from '@angular/platform-browser';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {
// Change whatever your like
public link = "https://fonts.googleapis.com/css?family=Noto+Sans+TC"
constructor(
private sanitizer: DomSanitizer
) {
this.sanitizer = sanitizer;
}
getFontCSS() {
return this.sanitizer.bypassSecurityTrustResourceUrl(this.link);
}
}
In app.component.html
<link [href]="getFontCSS()" rel="stylesheet">
<p [ngStyle]="{'font-family': 'Noto Sans TC'}">Lorem ipsum</p>
<p [ngStyle]="{'font-family': 'Arial'}">Lorem ipsum</p>
Также вам может понадобиться использовать ViewEncapsulation.None
, если вы хотите, чтобы стиль применялся к подкомпонентам.
2.Не существует CSS
Допустим, вы разрешаете пользователю загружать шрифт в firebase storage
и запускать cloud functions
.Firebase позволяет вам написать новый CSS для /tmp
, загрузить на firebase storage
и вернуть URL.Реально зависит, какой сервер и язык вы используете.
3.Использование FontFace (не рекомендуется)
В app.component.ts
,
import { Component } from '@angular/core';
declare let FontFace: any;
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {
constructor() {
this.loadFont()
}
loadFont() {
let customFont = new FontFace('barCode', 'url(https://fonts.gstatic.com/s/felipa/v6/FwZa7-owz1Eu4F_AT96F.woff2)');
customFont.load().then((res) => {
document['fonts'].add(res);
}).catch((error) => {
console.log(error)
})
}
}
В app.component.html
,
<p [ngStyle]="{'font-family': 'barCode'}">Lorem ipsum</p>
Это пока не рекомендуется, так как FontFace является экспериментальнымтехнологии и Working Draft
.Существует проблема кросс-браузерной поддержки.