【发布时间】:2016-10-05 14:00:57
【问题描述】:
我正在尝试做的事情:
- 动态创建组件(完成)
- 允许动态创建的组件利用“输出”,以便父组件可以侦听来自子组件的更改。
这是我正在尝试做的 Plnkr。 Plnker -> https://plnkr.co/edit/XpDCGIwd2at9oR74lpY5?p=preview
当用户点击“+组件”时,下面会创建组件
let componentFactory = this.componentFactoryResolver.resolveComponentFactory(ChildComponent);
let ref = this.container.createComponent(componentFactory);
在添加的每个子组件中,当用户点击“触发事件”时
<span class="initiateParentAction"
(click)="fireEventEmitter()" [class.eventFired]="eventFired==true">Fire Output Event: {{eventFired}}</span>
它调用以下代码
fireEventEmitter(){
console.log("Event Fired");
this.parentActionReq.emit({
action: "helloWorld"
});
this.eventFired = true;
setTimeout(() => this.eventFired=false, 2000);
}
父组件(在本例中为“App”组件)正在监听这些输出,如下所示
<ng-container #container
(parentActionReq)="childActionInitiated($event)"></ng-container>
我无法从动态创建的组件中获取事件以向父级注册。在 Plnker 中,“Received child output Event”应该变为 true。
此时,我在想,由于这些组件是在运行时添加的,我需要以某种方式重新初始化事件检测 OnInit。但一直没有取得进展。
任何建议、提示、指导都将在此不胜感激。
我很犹豫是否要走上创建自己的 Observables 的道路,因为这似乎是在重新创建轮子,输出完全符合我的目的。
谢谢。
【问题讨论】:
-
你能更新一下 plunker,你是如何工作的
标签: angular angular2-components angular2-output