У меня есть следующий фрагмент HTML5 в домашнем компоненте. html:
<div id="main-tv-cabinet">
<video id="tv" autoplay preload="auto" controls
width="640" height="480"
(ended)="onTvPreviewEnded()">
<source src="{{sermonForPreview}}" type="video/mp4">
Sorry, your browser doesn't support embedded videos.
</video>
</div>
Моя модель просмотра выглядит следующим образом:
export class HomeComponent {
private sermonIndexForPreview : number = 0;
private sermonsForPreview : string[] = [];
public sermonForPreview = "";
constructor()
this.sermonsForPreview.push("assets/videos/previous-sermon-snippet-1.mp4");
this.sermonsForPreview.push("assets/videos/previous-sermon-snippet-2.mp4");
this.sermonForPreview= this.sermonsForPreview[0];
}
}
public onTvPreviewEnded(){
this.sermonIndexForPreview = (this.sermonIndexForPreview + 1) % 2;
this.sermonForPreview = this.sermonsForPreview[this.sermonIndexForPreview];
this.restartVideoPlayer();
console.log(this.sermonForPreview);
}
private restartVideoPlayer() {
var tvScreen: any = document.getElementById("tv");
// TO FIGURE: why is binding not working here?
tvScreen.src = this.sermonForPreview;
if (tvScreen.paused)
tvScreen.play();
else tvScreen.pause();
}
}
Когда воспроизведение видео заканчивается первый, я ожидаю, что второй будет играть, а когда второй будет готов, вернемся к первому, et c. Возникает петля, но элемент видео застревает на том видео, которое находится первым в списке, если я не закомментирую строку
tvScreen.src = this.sermonForPreview;
Я понимаю, что односторонняя привязка должна отражать изменения в модели представления обратно в Посмотреть. Я даже пробовал двустороннее назначение ставок с синтаксисом [()], но это не помогло. Что я пропустил?