Есть два варианта: упаковка видео элемента в свой собственный компонент или создание директивы для видеоэлемента. Ниже я покажу первый пример.
Продлить компонент вашей точки зрения с логикой из следующего примера
@Component({
selector: 'view',
template: `
<div *ngFor="let video of videos">
<my-video [src]="video.url" (requestPlayback)="onVideoRequestPlayback($event)"></my-video>
</div>
`
})
export class MyViewComponent {
@ViewChildren(MyVideoComponent) videoComponents: QueryList<MyVideoComponent>;
onVideoRequestPlayback(targetVideo: MyVideoComponent) {
this.videoComponents.forEach(video => video.pause());
targetVideo.play();
}
}
видео компонент сам
Здесь я предполагаю, что мыши элемент запускает воспроизведение видео. Если у вас есть другой способ запуска воспроизведения, вам необходимо адаптировать это решение.
@Component({
selector: 'my-video',
template: `
<video #video width="320" height="240" controls>
<source [src]="src" type="video/mp4">
Your browser does not support the video tag.
</video>
`
})
export class MyVideoComponent {
@Output() requestPlayback: EventEmitter<MyVideoComponent> = new EventEmitter<MyVideoComponent>();
@ViewChild('video') videoElement: ElementRef;
@Input() src: string;
@HostListener('click', ['$event']) onClick(event: Event) {
if (this.videoElement.nativeElement.paused) {
this.requestPlayback.emit(this);
}
event.preventDefault();
}
pause() {
this.videoElement.nativeElement.pause();
}
play() {
this.videoElement.nativeElement.play();
}
}
Видеокомпонент запрашивает воспроизведение для запуска. Однако я оставляю его до родительского компонента, чтобы решить, когда начать воспроизведение. В общем случае, когда у вас есть несколько родственных компонентов, и они должны взаимодействовать друг с другом, вы проходите через родительский компонент.
спасибо за ответ, но на паузе он даже не входит в метод 'onVideoRequestPlayback' – gsiradze
Как вы запускаете запуск и приостановку видео? Функция onVideoRequestPlayback вызывается только при запуске видео, а не при ее приостановке. Это так, как предполагалось. Потому что только при запуске видео мы заботимся о приостановке других видео. –
Было бы неплохо, если бы вы ответили на мой комментарий :-). –