【问题标题】:Font Awesome 5 with Angular带有 Angular 的 Font Awesome 5
【发布时间】:2019-09-14 17:04:24
【问题描述】:

如何在 Angular (2+) 中使用 font-awesome 5?

我尝试在组件中添加这个:

import {faChevronLeft, faChevronRight} from '@fortawesome/fontawesome-free-solid';
import fontawesome from '@fortawesome/fontawesome';
...
constructor(){
   fontawesome.library.add(faChevronLeft, faChevronRight);
}

然后在 HTML 中:

<span class="fa" [class.fa-chevron-left]="direction==='left'" [class.fa-chevron-right]="direction==='right'"></span>

但这给了我一个在圆圈中闪烁的问号。

【问题讨论】:

  • "这个项目还没有准备好生产。它基本上是一个精心制作的 FA5 图标的“hello world”,使用 Angular 组件,使用 Font Awesome 5 API。"此外,它没有在 NPM 中发布。
  • 注意:我是用 npm 安装的

标签: angular font-awesome font-awesome-5 angular-fontawesome


【解决方案1】:

你有两个选择:


1. 使用 angular-fontawesome 库

只需按照他们的github page 上的说明进行操作即可。


2. 直接使用fontawesome 5

确保您已安装所有相关的npm packages。
对于 Pro 包,请查看 this。

  1. 导入相关图标:

    import {faChevronLeft, faChevronRight} from '@fortawesome/fontawesome-free-solid';
    import fontawesome from '@fortawesome/fontawesome';
    
  2. 将图标添加到fontawesome 库在全局范围内(不在组件的构造函数内):

    fontawesome.library.add(faChevronLeft, faChevronRight);
    
  3. 在html中使用:

    <span class="fas" [class.fa-chevron-left]="direction==='left'" [class.fa-chevron-right]="direction==='right'"></span>
    
  4. 注意 html 中的前缀:

    • fas 用于fontawesome-free-solid 图标(也适用于fa)

      <span class="fas fa-chevron-left"></span>
      
    • fab 用于fontawesome-free-brands 图标

      <span class="fab fa-bitcoin"></span>
      
    • far 用于fontawesome-free-regular 图标

      <span class="far fa-chevron-left"></span>
      
    • fal 用于fontawesome-free-light 图标(专业版)

      <span class="fal fa-chevron-left"></span>
      

重要提示:

使用变量来定义fontawesome 类是很好的,只要它只完成一次(在初始化时)。但是,如果变量更改其值,它将不会反映在 html 中。 考虑这个例子:

<span class="fas fa-chevron-{{direction}}"></span>

这将在初始化时放置正确的图标,但如果之后方向改变,它将不会被反映。
原因是fontawesome 5 用适当的svg 替换了以fa ... 分类的元素,并且一旦被替换,任何变量都不会影响这一点。
如果您希望上面的 html 反映运行时更改,您必须像这样更改它:

<span *ngIf="direction==='right'"><span class="fas fa-chevron-right"></span></span>
<span *ngIf="direction==='left'"><span class="fas fa-chevron-left"></span></span>

外部span 是必要的,因为内部span 被svg 替换,所以你不能在上面放*ngIf。

进一步阅读:

【讨论】:

  • “这个项目正在进行中,尚未准备好生产。” - 自述文件没有更新吗? :)
  • 将 span 包含在 span 中的建议是保存我在(现在)外部 span 上的角度(点击)事件的救命稻草,以及防止每次点击时堆积越来越多的图标在其他跨度上。希望这是有道理的。用简单的英语...谢谢!
  • Add the icons to fontawesome library in global scope 是什么意思?
  • 表示不在课堂内。在导入或类似之后。
  • @Andy Clark angular-fontawesome 不包含图标。您将它与 fontawesome 库一起安装。可能您安装了核心图标但忘记安装其他图标。有 free-solid-svg-icons、free-brands-svg-icons、free-regular-svg-icons 等等 pro 图标。这一切都在他们的 github 页面上指定。
【解决方案2】:

最简单的方法是通过npm安装,然后导入样式:

1)

npm i @fortawesome/fontawesome-free --save

2) 在 angular.json

中导入样式
"styles": [
  ...
  "node_modules/@fortawesome/fontawesome-free/css/all.css"
  ...
]

然后你就可以在他们的documentation 中使用它了

<i class="fas fa-address-card"></i>

【讨论】:

  • 像魅力一样工作。谢谢!
  • 干净简单。
  • 我想在这种情况下摇树是行不通的
【解决方案3】:

我在 Angular 中使用 Font Awesome 5

这是 HTML 代码

<fa-icon [icon]="isFavorite ? ['fas','star'] : ['far','star']" (click)="onClick()"> Star </fa-icon>

这是我的组件

import { Component, OnInit } from '@angular/core';

@Component({
  selector: 'favorite',
  templateUrl: './favorite.component.html',
  styleUrls: ['./favorite.component.css']
})
export class FavoriteComponent implements OnInit {
isFavorite: boolean;
  prefix:string;
  constructor() { }    
  ngOnInit() { }

  onClick(){
    this.isFavorite = !this.isFavorite;    
  }
}
`

【讨论】:

  • 虽然此代码可能会回答问题,但提供有关它如何和/或为什么解决问题的额外上下文将提高​​答案的长期价值。
  • 如何从函数中获取图标名称?
猜你喜欢
  • 2018-07-23
  • 1970-01-01
  • 1970-01-01
  • 2017-04-26
  • 2018-11-03
  • 2019-08-01
  • 1970-01-01
  • 2019-12-17
  • 1970-01-01
相关资源
最近更新 更多