Build a Mini Netflix (with Vue)
  • Introduction
  • Enter Contest
  • Media Delivery and Transformation
  • Setting Up a Webtask Server
  • Provision and Configure a Database
  • Create Server Routes
  • Setting Up a Vue Client
  • Header and Navigation
  • Video Player Component
  • Playing Videos
  • Cloudinary Account and Initialization
  • List of Movies Component
  • Showing A List of Movies
  • New Movie Modal Component
  • Uploading Movies
  • Sharing on Twitter
  • Deploy to Heroku
  • What's Next
Powered by GitBook
On this page

List of Movies Component

Recall that you need a component that lists all the available movies, that is, those that are in the database. Your users can then pick from that list a movie to watch.

Add a VideoList component with the following content:

<template>
  <div>
    <div class="columns" v-for="i in Math.ceil(movies.length / 6)" :key="i">
      <div v-if="movies.length < 1">Loading...</div>
      <div v-else v-for="movie in movies.slice((i - 1) * 6, i * 6)" :key="movie._id" class="column">
        <img :src="cloudinaryInstance.url(movie.banner)" alt="" class="banner" @click="$emit('choose-movie', movie)">
      </div>
    </div>
  </div>
</template>
<script>
import axios from 'axios';
export default {
  props: ['cloudinaryInstance', 'movies'],
}
</script>
<style>
.banner {
  max-width: 204px;
  height: auto;
}
.banner:hover {
  cursor: pointer;
}
</style>

The properties that are passed are cloudinaryInstance and movies. The instance that resolves an image URL from its public ID while the movies array is being iterated shows a list of movies in a six-column grid.

Take a close look at the img tag:

<img :src="cloudinaryInstance.url(movie.banner)" alt="" class="banner" @click="$emit('choose-movie', movie)">

A click event is attached to each image. Clicking an image triggers an event called choose-movie to the parent component with a payload of the selected movie.

PreviousCloudinary Account and InitializationNextShowing A List of Movies

Last updated 7 years ago