如何为md-icon正确注册font-awesome?

Hao*_* Yu 31 angular-material2

md-icon的文档描述了如何在几个部分中使用font-awesome,并建议我们最终可以使用font-awesome

<md-icon fontSet="fa" fontIcon="alarm"></md-icon>
Run Code Online (Sandbox Code Playgroud)

但是文档非常令人困惑,我几乎找不到通过Google为md-icon注册第三种字体集如font-awesome的例程.

任何帮助表示赞赏!

PS:我知道通常的<i>方法通常有效,但在一些最初使用md-icon的例子中似乎没有用.

Sea*_*den 81

在你的AppModule中添加:

import { MatIconModule, MatIconRegistry } from '@angular/material';
Run Code Online (Sandbox Code Playgroud)

然后将MatIconModule添加到您的导入中,例如:

imports: [...
   MatIconModule
...]
Run Code Online (Sandbox Code Playgroud)

将MatIconRegistry添加到您的提供者:

providers: [...
    MatIconRegistry
....]
Run Code Online (Sandbox Code Playgroud)

然后将以下内容添加到AppModule类:

export class AppModule {
    constructor(
        ...public matIconRegistry: MatIconRegistry) {
        matIconRegistry.registerFontClassAlias('fontawesome', 'fa');
    }
Run Code Online (Sandbox Code Playgroud)

然后您可以在项目中的任何位置使用,如下所示:

<mat-icon fontSet="fa" fontIcon="fa-times-circle"></mat-icon>
Run Code Online (Sandbox Code Playgroud)

更新

你需要在你的项目中包含fontawesome.我使用angular-cli,所以添加了字体很棒的npm包:

npm install font-awesome --save
Run Code Online (Sandbox Code Playgroud)

并将其包含在angular-cli.json文件的样式列表中,对我有用:

"styles": [
    ...
    "../node_modules/font-awesome/scss/font-awesome.scss",
  ],
Run Code Online (Sandbox Code Playgroud)

更新2

将前缀更改为"Mat"以反映角度材质的最新更新.

  • 您还可以注册默认字体集,以避免在AppModule的构造函数`matIconRegistry.setDefaultFontSetClass('fa')中键入fontSet ="fa";` (3认同)
  • 这对我不起作用。不过,我可以使用默认的 `&lt;i class="fa fa-icon"&gt;` 并且它可以正常工作。但是使用 `&lt;mat-icon&gt;` 对我来说不起作用,即使在完全按照您的描述进行设置之后也是如此。 (2认同)

Ama*_*rma 21

在Index.html文件中添加字体awesome cdn链接:

<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css">
Run Code Online (Sandbox Code Playgroud)

然后尝试使用此代码,它对我有用:

<md-icon class="fa fa-clock-o" aria-hidden="true"></md-icon>
<md-icon class="fa fa-bell" aria-hidden="true"></md-icon>
Run Code Online (Sandbox Code Playgroud)

  • 这不是为md-icon注册font-awesome的正确方法.请看下面的答案. (3认同)
  • @AaronLavers上面的答案是不使用mat-icon.它在页面上放置了一个mat-icon元素,然后应用了一个字体很棒的类.它绕过mat-icon属性中存在的任何表示逻辑.我怀疑上面做的和使用<i>之间有什么区别. (3认同)
  • 这非常简单.谢谢. (2认同)