[英]Add Events and Variable to Dynamically created Component Angular 4
我在Angular应用程序中有一个动态创建的组件,如下所示:
const factory = this.resolver.resolveComponentFactory<IMessage>(MessageComponent);
this.component = this.container.createComponent(factory);
this.component.instance.body = message;
它相当于在组件的HTML中添加<message [body]="message"></message>
。
让我们假设,我想在我的动态组件代码中实现类似的东西:
<message [body]="message" #form="my-form" (change)="myFunction()"></message>
如何绑定这些附加变量并通过组件的ts文件更改内部事件?
输入绑定和事件输出不会自动与动态创建的组件一起使用。 这是因为编译器创建了侦听子组件事件的函数以及基于它解析的模板更新子组件绑定的函数。 模板中未指定动态组件,因此编译器不会创建此类函数。 你可以在这里阅读这些函数 - 在Angular中更新属性绑定的机制 。 函数名称是updateDirectives
。
您必须手动更新属性并订阅事件:
this.component.instance.body = message;
this.component.instance.change.subscribe();
这意味着子组件不能使用ngOnChanges
生命周期钩子,因为它永远不会被Angular触发。
此外,像#form
这样的查询列表绑定也不起作用。 您有权访问的是组件的实例。 因此,无论指令将自身导出为my-form
都应注入主机MessageComponent
并将与my-form
相关联的数据附加到组件实例。 然后父组件将能够访问它:
this.component.instance.formData;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.