使用参数动态创建组件

Bal*_*mal 6 frontend angular angular6

我有一个使用 ComponentFactoryResolver 动态创建的组件

this.container.clear();
let factory  = this.resolver.resolveComponentFactory(DynamicComponent);
this.componentRef = this.container.createComponent(factory);

template: '...<child-component [param1]="param1"></child-component>...';
Run Code Online (Sandbox Code Playgroud)

问题是 DynamicComponent 的模板有子组件和输入绑定。有没有办法在动态创建组件时将参数传递给子组件?

Cri*_*ìna 7

是的,实现它的最简单方法是:

this.componentRef.instance.param1 = param1;
Run Code Online (Sandbox Code Playgroud)

但要注意,这种解决方案很容易出错。如果param1随时间变化,可以得到

异常:表达式在检查后发生了变化。

这不容易调试。

您可能想要使用依赖项注入解决方案,如本教程中所述。


Dav*_*sta 5

是这样的:

 const factory = this.componentFactoryResolver.resolveComponentFactory(LoginComponent);
    const component: ComponentRef<LoginComponent> = this.viewContainerRef.createComponent(factory);
    component.instance.user = "prop 1";
    component.instance.input2 = "prop 2";
Run Code Online (Sandbox Code Playgroud)

  • 尝试添加此构造函数(private cd: ChangeDetectorRef){} 然后在分配值后,使用 this.cd.detectChanges(); (2认同)
  • 什么是“this.viewContainerRef” (2认同)