-1

次の子コンポーネントクラスで試しました

@Component({
  selector: 'child',
  templateUrl: './child.component.html'
})
export class Child implements OnInit {
  @Output() send: EventEmitter<string>;
  public constructor(){}
  public ngOnInit() {
    send = new EventEmitter<string>();
  }
  public onEventXYZ() {
    this.send.emit('hello');
  }
}

親テンプレートでは、上記のコンポーネントを次のように参照しています

<child (send)="handleSend($event)"></child>

このエラーが発生しました:Cannot read property 'subscribe' of undefined...ページの読み込み時。後で、友人の提案で、EventEmitter の初期化を ngOnInit からコンストラクターに移動したとき、すべてが正常に機能しました。

では、 ngOnInit 内でコンポーネント変数を初期化するには遅すぎますか?

4

1 に答える 1

1

親コンポーネントで受信したイベントをサブスクライブしていると思います。テンプレートでイベント バインディング シグネチャ ( (send)="handleSend($event)") を使用する場合、イベントを明示的にサブスクライブする必要はありません。

以下を試してください

親.コンポーネント.html

<child (send)="handleSend($event)"></child>

親.コンポーネント.ts

handleSend(event: any) {
  console.log(event);
  // no subscription is needed here
}

初期化に関してEventEmitterは、定義行で行うことができます。コードには影響しません。

child.component.ts

export class Child implements OnInit {
  @Output() send: EventEmitter<string> = new EventEmitter<string>();
  public constructor(){}
}
于 2020-07-15T15:01:05.617 に答える