我从NG4重写了库 – > NG6(使用angular-cli 6).这个lib改变了dynamicli角度组件,所以我使用ComponentFactoryResolver,在这里我卡住了.当我将ComponentFactoryResolver添加到构造函数时:
constructor( private componentFactoryResolver: ComponentFactoryResolver ) {}
并在目标应用程序中构建lib(成功)(我在本地文件中添加我的lib.json中的lib)我有这样的错误:
StaticInjectorError(AppModule)[MyLibComponent-> ComponentFactoryResolver]: StaticInjectorError(Platform: core)[MyLibComponent-> ComponentFactoryResolver]: NullInjectorError: No provider for ComponentFactoryResolver! at NullInjector.push../node_modules/@angular/core/fesm5/core.js.NullInjector.get (core.js:979) at resolveToken (core.js:1232) at tryResolveToken (core.js:1182) at StaticInjector.push../node_modules/@angular/core/fesm5/core.js.StaticInjector.get (core.js:1077) at resolveToken (core.js:1232) at tryResolveToken (core.js:1182) at StaticInjector.push../node_modules/@angular/core/fesm5/core.js.StaticInjector.get (core.js:1077) at resolveNgModuleDep (core.js:9238) at NgModuleRef_.push../node_modules/@angular/core/fesm5/core.js.NgModuleRef_.get (core.js:9919)
没有ComponentFactoryResolver,其他工作正常
完整组件:
import { Component,ComponentFactoryResolver,AfterContentInit,ViewChild,Inject,Input,InjectionToken } from '@angular/core'; import { AbHostDirective } from './../directives/ab-host.directive'; export const AB_COMPONENTS = new InjectionToken('AB_COMPONENTS'); @Component({ selector: 'lib-ab',template: `<ng-template lib-ab-host></ng-template>`,styles: [] }) export class MyLibComponent implements AfterContentInit { @ViewChild(AbHostDirective) abHost: AbHostDirective; @Input() globalConfiguration: any; @Input() domain = ''; constructor( @Inject(AB_COMPONENTS) private $configuredComponents: any,private componentFactoryResolver: ComponentFactoryResolver ) {} ngAfterContentInit() { const currentConfiguration = this.$configuredComponents[this.domain]; if (!currentConfiguration) { console.error('No component for: ',+ this.domain); return; } const randomIndex = Math.floor(Math.random() * currentConfiguration.length); const componentFactory = this.componentFactoryResolver.resolveComponentFactory(currentConfiguration[randomIndex]); const viewContainerRef = this.abHost.viewContainerRef; viewContainerRef.clear(); const componentRef = viewContainerRef.createComponent(componentFactory); const instance = <any>componentRef.instance; instance.globalConfiguration = this.globalConfiguration; } }
解决方法
我遇到过同样的问题.这个问题解决了我的问题:
https://github.com/angular/angular/issues/20598
"build": { "options": { "preserveSymlinks": true,} }