从结构指令发送到父组件的事件不起作用

时间:2017-05-29 06:09:22

标签: javascript angular typescript angular-directive

作为问题的后续问题:Emit event from Directive to Parent element : Angular2

看起来当结构指令发出事件时,父组件不会接收它。

@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()永远不会被调用。

2 个答案:

答案 0 :(得分:6)

这是可能的。问题是当前的Angular 5.2.6仍然不支持结构指令的<ng-template [appWidget]="wdg" (wdgInit)="containerDoSomthing($event)"></ng-template> 绑定,如果与问题一样使用带糖的星号(*)语法(参见GitHub issue)。

为了使其有效,您必须将其转换为去糖形式(see here),如下所示:

 public class Score : MonoBehaviour {
 public Transform Charakter;
 public Text scoreText;
 public Text HighscoreText;

 public void Start()
 {
     HighscoreText.text = PlayerPrefs.GetString("HighScore");
     PlayerPrefs.Save();
 }

 private void Update()
 {
     scoreText.text = Charakter.position.x.ToString("0");

     int score = int.Parse(scoreText.text);
     int highscore = int.Parse(PlayerPrefs.GetString("HighScore"));

     if (score > highscore)
     {
         PlayerPrefs.SetString("HighScore", scoreText.text);
         PlayerPrefs.Save();
     }
 }

答案 1 :(得分:0)

我认为不可能将EventEmitter添加到结构指令中,只是因为指令引用的本机元素始终是注释!

可能是由于这个事实,一开始就没有在DOM中生成事件......但这不是属性指令的问题,因为它们位于正确的DOM元素上。