Search code examples
htmlangularangular2-template

Playing HTML 5 video from Angular 2 Typescript


I want to start playing a HTML video programmatically from TypeScript when the User clicks on the Video area itself.

This is my HTML code:

<div class="video">
<video controls (click)="toggleVideo()" id="videoPlayer">
    <source src="{{videoSource}}" type="video/mp4" />
    Browser not supported
</video>
</div>

This is my TypeScript code:

@ViewChild('videoPlayer') videoplayer: any;

toggleVideo(event: any) {
    this.videoplayer.play();
}

The issue is that I get an error that says play() function is not defined/exists. What could be the mistake here?


Solution

  • Problem is you're trying to get a reference to video element using its id. You need to use template reference variable (#) instead:

    <div class="video">
        <video controls (click)="toggleVideo()" #videoPlayer>
            <source src="{{videoSource}}" type="video/mp4" />
            Browser not supported
        </video>
    </div>
    

    Read more about template reference variable here.

    Edit:

    Also, in your toggleVideo(event: any) function, you need to get nativeElement and then call the play() function because you are accessing DOM element directly:

    @ViewChild('videoPlayer') videoplayer: ElementRef;
    
    toggleVideo(event: any) {
        this.videoplayer.nativeElement.play();
    }
    

    Credits to @peeskillet for this one.