OTF 组件的角度路由

Posted

技术标签:

【中文标题】OTF 组件的角度路由【英文标题】:Angular routes for OTF components 【发布时间】:2019-02-14 17:24:21 【问题描述】:

我们使用 Angular 6,动态创建组件并使用以下代码为它们定义路线:

const template = '<span>generated on the fly: name</span>';
const tmpCmp = Component( template: template )(class 
  );
const tmpModule = NgModule( declarations: [tmpCmp] )(class 
  );

await this._compiler.compileModuleAndAllComponentsAsync(tmpModule)
  .then((factories) => 
    const f = factories.componentFactories[0];
    const cmpRef = this.vc.createComponent(tmpCmp);
    cmpRef.instance.name = 'dynamic';

    appRoutes.push( path: 'dynamic', component: tmpCmp);

  )

this.router.resetConfig(appRoutes);

当我们导航到动态创建的组件的 url 时,我们得到一个错误:

没有为 ConfirmComponent 找到组件工厂。你添加到 @NgModule.entryComponents?

我们缺少什么,是否支持这种情况?

非常感谢任何帮助

【问题讨论】:

见my answer。我很快会写一篇文章,解释为什么我的解决方案有效,以及为什么你的解决方案无效。 Follow me on Twitter 得到通知 谢谢,您的示例适用于我的情况。抱歉回复晚了,会跟进那篇文章:) 酷,祝你好运 【参考方案1】:

你可以这样做:

  ngOnInit() 
    const template = '<span>generated on the fly: name</span>';
    const tmpCmp = Component(template: template)(class 
    );

    const routes = [path: '', component: tmpCmp];
    const tmpModule = NgModule(imports: [RouterModule.forChild(routes)], declarations: [tmpCmp])(class 
    );

    this.compiler.compileModuleAsync(tmpModule).then((ngModuleFactory) => 

      const appRoutes = [...this.router.config];

      const route = 
        path: 'dynamic',
        loadChildren() 
          return ngModuleFactory;
        
      ;

      appRoutes.push(route);

      this.router.resetConfig(appRoutes);

      // test navigation
      this.router.navigateByUrl('/dynamic');
    );
  

【讨论】:

以上是关于OTF 组件的角度路由的主要内容,如果未能解决你的问题,请参考以下文章

在没有导航或路由的角度 2 类型脚本中,将数据一个组件传递到另一个组件的所有可能性是啥?

角度如何在路由中使用 url 映射组件?

角度 5 中具有相同 URL 的两个不同组件(通过延迟加载在路由器中传递 slug)

有没有办法在角度上实现两步路由?

路由之间的角度传递数据

从角度 2 中的历史记录中删除一个组件