2017-05-29 81 views
1

作爲後續於問題: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()永遠不會獲取調用。

回答

0

我相信不可能將EventEmitter添加到結構指令中,因爲指令引用的本地元素始終是註釋!

這可能是由於這樣一個事實,一個事件永遠不會在DOM中生成......儘管屬性指令並不是問題,但它們是坐在適當的DOM元素上的。

0

這是可能的。問題是當前的Angular 5.2.6仍然不支持@Output綁定的結構指令,如果與糖化星號(*)語法一起使用(請參閱GitHub issue),就像問題中一樣。

爲了使它工作,你必須要改變它去sugarized形式(see here)是這樣的:

<ng-template [appWidget]="wdg" (wdgInit)="containerDoSomthing($event)"></ng-template>