我通过 iconName 调查了 fontawesome 图标的动态加载问题。但是代码不起作用。是什么原因?最佳做法是什么?为什么我需要在指令 ngOnInit() 挂钩中调用 ngOnChanges()?我在浏览器中遇到的错误是“FontAwesome:找不到图标。看起来您为此组件提供了一个空或未定义的图标对象。”
import { AppComponent } from './app.component';
import { FontAwesomeModule } from '@fortawesome/angular-fontawesome';
import { library, dom } from '@fortawesome/fontawesome-svg-core';
import { fas,faCheck, faCalendar, faTimes } from '@fortawesome/free-solid-svg-icons';
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { IconDirective } from './icon.directive';
@NgModule({
declarations: [AppComponent, IconDirective],
imports: [BrowserModule, FontAwesomeModule],
providers: [],
bootstrap: [AppComponent],
entryComponents: [FaIconComponent],
})
export class AppModule {
constructor() {
library.add(fas,faCheck, faCalendar, faTimes);
dom.watch();
}
}
import { Component } from '@angular/core';
@Component({
selector: 'app-root',
template: '<div iconDirective></div>'
})
export class AppComponent {
constructor() { }
}
import { Directive, OnInit, ViewContainerRef, ComponentFactoryResolver }
from '@angular/core';
import { FaIconComponent } from '@fortawesome/angular-fontawesome';
import { faCheck, faCalendar, faTimes } from '@fortawesome/free-solid-svg-icons';
import { icon } from '@fortawesome/fontawesome-svg-core';
@Directive({
selector: '[iconDirective]'
})
export class IconDirective{
constructor(
public viewContainerRef: ViewContainerRef,
private componentFactoryResolver: ComponentFactoryResolver) {
}
ngOnInit() {
const componentFactory =
this.componentFactoryResolver.resolveComponentFactory(FaIconComponent);
const componentRef =
this.viewContainerRef.createComponent(componentFactory);
(<FaIconComponent>componentRef.instance).icon =
icon({iconName: 'times', prefix: 'fas'});
// (<FaIconComponent>componentRef.instance).iconProp = faCheck; //works
(<FaIconComponent>componentRef.instance).ngOnChanges({});
}
}