Angular 如何从使用DCL loadintolocation()加载的子组件调用父组件中的事件

Angular 如何从使用DCL loadintolocation()加载的子组件调用父组件中的事件,angular,Angular,我在父组件中有一个事件。我想从使用DCLloadintolocation()创建的子组件调用该事件。我在子组件中遵循此逻辑来引发事件 @Output()myevent1:EventEmitter; onSubmit(){ log(this.myForm.value); this.myevent1.emit(); } 我能够为已经提到的组件引发事件,但不能为使用DCL创建的组件引发事件。请告诉我如何从动态创建的组件引发父组件中的事件 这是我迄今为止一直在使用的plunker演示版更新beta.1

我在父组件中有一个事件。我想从使用DCL
loadintolocation()
创建的子组件调用该事件。我在子组件中遵循此逻辑来引发事件

@Output()myevent1:EventEmitter;
onSubmit(){
log(this.myForm.value);
this.myevent1.emit();
}
我能够为已经提到的组件引发事件,但不能为使用DCL创建的组件引发事件。请告诉我如何从动态创建的组件引发父组件中的事件


这是我迄今为止一直在使用的plunker演示版更新beta.16

dcl.loadIntoLocation()
现在需要一个
ViewContainerRef
而不是模板变量名

@组件({
选择器:“动态”,
模板:`
我是动态组件
点击我
`,
})
导出类DynamicComponent{
someEvent=neweventemitter();
}
@组件({
选择器:“我的应用程序”,
模板:`
你好
单击(顶部):{top}
下面是动态组件
`,
})
导出类AppComponent{
@ViewChild('target',{read:ViewContainerRef})目标;
顶部
构造函数(专用dcl:DynamicComponentLoader){}
ngAfterViewInit(){
this.dcl.loadNextToLocation(DynamicComponent,this.target)
。然后(ref=>{
ref.instance.someEvent
.subscribe(值=>{
console.log(value.clientX);
this.top=value.clientX;
console.log(this.top);
})
});
}
}

原创

LoadInLocation(
某些组件,
someElementRef,
“某个锚”,
[/*其他供应商*/
提供(ParentComponent,useValue:this)];
可以将父组件传递给动态创建的组件

在子组件中,您只需将父组件添加到构造函数参数列表中

构造函数(父级:ParentComponent){}

为了不将父组件和子组件紧密耦合,您还可以使用共享服务并传递该服务,而不是传递父组件本身。

加载组件时,您可以将子组件的事件订阅到子组件的事件中,从中可以调用父函数

dcl.loadIntoLocation(ChildComponent, elementRef, 'child')
  .then((newComponent) => {
    newComponent.instance.event.subscribe(() => { .. call your parent ..});
  })
更新


请看这里的plunker:

Gunter的答案是好的,如果你从孩子那里知道父母。但是如果你想加载任何未知的组件,你只知道事件,Gunter的回答也很好,但我不想在child中提到父组件…你能给我一个plunker演示吗,因为在你的回答中没有提到child中的父组件…请broYea,我将在不必要时取消订阅