*ngIf
で@ViewChild
要素を切り替えようとしていますが、その後、ネイティブイベントを呼び出します。@ViewChildが定義されていません
これは私の#audioPlayer
で装飾されているので、@ViewChild
で要素を抽出することができます。私のtypescriptですで
<audio
#audioPlayer
*ngIf="conversationIsRunning"
[src]='activeConversation?.clips[activeConversation.activeClipId].audio.blob'
(ended)="audioComplete($event)"
autoplay controls preload="auto" >
</audio>
私は次があります。
@ViewChild('audioPlayer') audioPlayer;
private conversationIsRunning: boolean;
ngOnInit() {
this.conversationIsRunning = false;
}
ngOnChanges() {
console.log("ngOnChanges");
this.conversationIsRunning = true;
console.log(this.audioPlayer); // undefined
this.audioPlayer.nativeElement.play(); // error
}
私はaudio
要素から*ngIf
を削除する場合は、エラーが消えます。しかし、私はそれが必要でないときに要素が破壊されている場所でこの機能を本当に望んでいます。
audioPlayer set called >> undefined undefined
を出力し...、ということがありません成功へ...
private privAudioPlayer: ViewContainerRef;
@ViewChild('audioPlayer') set audioPlayer(audioPlayer: ViewContainerRef) {
this.privAudioPlayer = audioPlayer;
console.log('audioPlayer set called >> ', audioPlayer, this.privAudioPlayer);
};
実装@ViewChild
にセッターを使用することができますthisの回答で見た
また、this.conversationIsRunning = true;
を現在の場所から分割し、さまざまなライフサイクルフックに入れて、ngOnChanges
を他のライフサイクルフックに変更しても役に立たないようにしました。
次のフレームなどを待つ必要がありますか?なぜset audioPlayer
ミューテータはundefined
を受け取っていますか?
2番目のコード例がうまくいかない理由はわかりません。私はそれを期待するだろう。 –
@GünterZöchbauerこれを調べてくれてありがとう、明日の仕事に戻るときに更新します。 - 歓声。 – Zze