动态负载组件在生产中不起作用

AAH*_*AHN 4 angular6

我正在使用Angular 6,当用户按名称单击选项卡加载组件时,我试图按名称动态加载组件,我正在使用以下代码,巫婆在build上运行完美,但在build --production上不起作用

loadTabData(tabname: any) {
    this.selectedTab = tabname;
    var factories = Array.from(this.resolver["_factories"].keys());
    var factoryClass = <Type<any>>(
      factories.find((x: any) => x.name === tabname)
    );
    let viewContainerRef = this.comLoad.viewContainerRef;
    viewContainerRef.clear();
    const factory = this.resolver.resolveComponentFactory(factoryClass);
    let componentRef = viewContainerRef.createComponent(factory);
    componentRef.instance.serviceId = this.serviceId;
  }
Run Code Online (Sandbox Code Playgroud)

当用户单击选项卡时,我在生产中加载相关组件,则返回以下错误

错误错误:未找到未定义的组件工厂。您是否将其添加到@ NgModule.entryComponents?在e.resolveComponentFactory(main.b98d71b6b5a909371223.js:1)在Wt(main.b98d71b6b5a909371223.js:1)处

AYK*_*KHO 10

实际上,由于角度编译器不会更改组件名称,因此这在开发和构建中效果很好。在这条线

var factories = Array.from(this.resolver["_factories"].keys());
    var factoryClass = <Type<any>>(
      factories.find((x: any) => x.name === tabname)
    );
Run Code Online (Sandbox Code Playgroud)

您正在按名称搜索组件,但在生产中此名称已更改,您可以通过打印工厂来检测到它

而不是像这样按组件选择器搜索;

const factories = Array.from(this.resolver["_factories"].values());
    const factory: any = factories.find(
      (x: any) => x.selector === this.selector
    );
Run Code Online (Sandbox Code Playgroud)

选择器未更改生产

希望这对您有帮助