从结构指令角父组件2发射事件不起作用
问题描述:
作为后续于问题:Emit event from Directive to Parent element : Angular2从结构指令角父组件2发射事件不起作用
它看起来时的结构指令发出事件等时,父组件不接收它。
@Directive({ selector: '[appWidget]' })
export class WidgetDirective implements OnInit{
@Output() wdgInit: EventEmitter<any> = new EventEmitter();
@Input() set appWidget (wdg: any) {
//display stuff
}
ngOnInit {
this.wdgInit.emit();
}
widget.component.html:
<ng-container *ngFor="let wdg of widgets">
<div *appTwitterWidget="wdg" >
<ng-container>
widgetContainer.component.html:
<app-widget [widgets]="widgetList" (wdgInit)="containerDoSomthing()"></app-widget>
在这种情况下,我觉得containerDoSomthing()永远不会获取调用。
答
我相信不可能将EventEmitter添加到结构指令中,因为指令引用的本地元素始终是注释!
这可能是由于这样一个事实,一个事件永远不会在DOM中生成......尽管属性指令并不是问题,但它们是坐在适当的DOM元素上的。
答
这是可能的。问题是当前的Angular 5.2.6仍然不支持@Output
绑定的结构指令,如果与糖化星号(*)语法一起使用(请参阅GitHub issue),就像问题中一样。
为了使它工作,你必须要改变它去sugarized形式(see here)是这样的:
<ng-template [appWidget]="wdg" (wdgInit)="containerDoSomthing($event)"></ng-template>