Подход 1: Реестр значков материалов
Материал позволяет использовать пользовательских значков SVG с его компонентами (например, mat-button
).Значки FontAwesome также являются SVG, поэтому вы можете использовать этот механизм для решения стоящей задачи.
// 1. Import desired FontAwesome icon
import { faFontAwesomeFlag } from '@fortawesome/free-brands-svg-icons';
import { icon } from '@fortawesome/fontawesome-svg-core';
// 4. Use with `mat-icon` component in your template
@Component({ template: '<button mat-button type="button"><mat-icon svgIcon="font-awesome" style="vertical-align: top"></mat-icon>Make Awesome!</button>' })
export class AppComponent {
constructor(registry: MatIconRegistry, sanitizer: DomSanitizer) {
// 2. Render icon into SVG string
const svg = icon(faFontAwesomeFlag).html.join('');
// 3. Register custom SVG icon in `MatIconRegistry`
registry.addSvgIconLiteral(
'font-awesome',
sanitizer.bypassSecurityTrustHtml(svg)
);
}
}
Также проверьте эту проблему для описания более легкой реализации.
Подход 2. Использование компонента fa-icon из библиотеки angular-fontawesome
Поскольку вы уже используете пакет @fortawesome/angular-fontawesome
в своем приложении, вы можете вообще не использовать mat-icon
и использовать fa-icon
внутри mat-button
вместо этого.
import { faFontAwesomeFlag } from '@fortawesome/free-brands-svg-icons';
@Component({ template: '<button mat-button type="button"><fa-icon [icon]="faFontAwesomeFlag" style="padding-right: 6px"></fa-icon>Make Awesome!</button>' })
export class AppComponent {
faFontAwesomeFlag = faFontAwesomeFlag;
}
Обратите внимание, что вам также нужно добавить FontAwesomeModule
к imports
, чтобы это работало.См. документацию для получения более подробной информации.
Вот демонстрация с обоими описанными подходами: https://stackblitz.com/edit/components-issue-8znrc5
Обратите внимание, что мне также пришлось добавить немного CSS для обеспеченияэтот значок хорошо совпадает с текстом кнопки.