#angular #typescript #icons #angular8 #font-awesome
#angular #typescript #Значки #angular8 #шрифт-awesome
Вопрос:
Я работаю над довольно большим приложением angular с внедренными модулями отложенной загрузки. Во многих компонентах, в разных модулях, я использую значки из font Awesome. На самом деле, значки реализуются индивидуально, как в этом примере:
В component.ts:
import { faChevronDown, faChevronUp, faTimes } from '@fortawesome/free-solid-svg-icons';
public faChevronDown= faChevronDown;
public faChevronDown= faChevronUp;
в component.html:
<fa-icon class="fa-md" [icon]="faChevronDown"></fa-icon>
Поскольку у меня появляется много значков, которые иногда одинаковы в разных компонентах, мне было интересно, есть ли способ разложить этот код на множители. Например, вместо объявления свойства для каждого значка в каждом компоненте, какой-то глобальный элемент, где я могу хранить все значки, которые я хочу использовать, и вызывать их непосредственно в HTML, когда это необходимо.
Следуя этой статье Angular Wiki, я обнаружил метод library.add(), который, как мне показалось, идеально подходит для этой цели, поэтому я попытался его реализовать:
В app.module:
import { faChevronDown, faChevronUp} from '@fortawesome/free-solid-svg-icons';
@NgModule({
declarations: [
AppComponent
],
imports: [
BrowserModule,
FontAwesomeModule
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule {
constructor() {
library.add(faChevronDown, faChevronUp);
}
}
и в моем component.html:
<fa-icon class="fa-md" icon="faChevronDown"></fa-icon>
Но у меня все еще есть ошибки: на моем дисплее я не вижу ни одного значка (экран отображается, но там, где я должен видеть значки, он пустой), а в консоли у меня эта ошибка:
FontAwesome: свойство icon
требуется для fa-icon
/ fa-duotone-icon
components . Это предупреждение станет серьезной ошибкой в версии 0.6.0.
Поэтому мне нужно это исправить или найти другое правильное решение для факторизации значков в моем приложении.
Ответ №1:
Проблема, вероятно, в том, что вы не explicity
объявили faChevronDown
в компоненте, в котором вы его используете.
У вас должно быть что-то вроде
import { faChevronDown, faChevronUp} from '@fortawesome/free-solid-svg-icons';
export class YourComponent {
faChevronDown = faChevronDown;
...
}
Затем в вашем HTML-шаблоне
<fa-icon [icon]="faChevronDown"></fa-icon>
Комментарии:
1. Дело в том, что я не хотел, чтобы все эти файлы импортировались в каждом компоненте, а только один раз в корневом модуле приложения. Поэтому необходимость импортировать значок в компонент — это именно то, чего я пытаюсь избежать.
Ответ №2:
Объявляете ли вы компонент, который использует значок Font Awesome в своем шаблоне, в том же модуле, который импортирует FontAwesomeModule
?
В соответствии с вашим примером ваш шаблон должен выглядеть следующим образом:
<fa-icon class="fa-md" icon="chevron-down"></fa-icon>
Вы можете найти подходящие названия значков, которые вам нужно использовать, найдя значок на веб-сайте самого Font Awesome.