当前位置:首页 > VUE

vue实现电影选择

2026-03-08 07:36:06VUE

Vue实现电影选择功能

使用Vue实现电影选择功能可以通过组件化开发、状态管理和API交互来完成。以下是具体实现方法:

创建电影列表组件

创建一个电影列表组件用于展示可选择的电影:

<template>
  <div class="movie-list">
    <div 
      v-for="movie in movies" 
      :key="movie.id"
      @click="selectMovie(movie)"
      :class="{ 'selected': selectedMovie && selectedMovie.id === movie.id }"
    >
      <img :src="movie.poster" :alt="movie.title">
      <h3>{{ movie.title }}</h3>
      <p>{{ movie.year }}</p>
    </div>
  </div>
</template>

<script>
export default {
  props: {
    movies: Array,
    selectedMovie: Object
  },
  methods: {
    selectMovie(movie) {
      this.$emit('movie-selected', movie)
    }
  }
}
</script>

实现电影详情展示

创建电影详情组件显示选中电影的详细信息:

vue实现电影选择

<template>
  <div class="movie-details" v-if="movie">
    <h2>{{ movie.title }}</h2>
    <img :src="movie.poster" :alt="movie.title">
    <p>{{ movie.plot }}</p>
    <p>导演: {{ movie.director }}</p>
    <p>演员: {{ movie.actors }}</p>
    <p>评分: {{ movie.rating }}</p>
  </div>
</template>

<script>
export default {
  props: {
    movie: Object
  }
}
</script>

主组件整合功能

在主组件中整合列表和详情功能,并处理电影数据:

<template>
  <div class="movie-selector">
    <MovieList 
      :movies="movies" 
      :selectedMovie="selectedMovie"
      @movie-selected="handleMovieSelect"
    />
    <MovieDetails :movie="selectedMovie" />
  </div>
</template>

<script>
import MovieList from './MovieList.vue'
import MovieDetails from './MovieDetails.vue'

export default {
  components: {
    MovieList,
    MovieDetails
  },
  data() {
    return {
      movies: [],
      selectedMovie: null
    }
  },
  created() {
    this.fetchMovies()
  },
  methods: {
    fetchMovies() {
      // 这里可以是API调用或本地数据
      this.movies = [
        { id: 1, title: '电影1', year: 2020, poster: 'url1', plot: '剧情1', director: '导演1', actors: '演员1', rating: 8.5 },
        { id: 2, title: '电影2', year: 2021, poster: 'url2', plot: '剧情2', director: '导演2', actors: '演员2', rating: 7.8 }
      ]
    },
    handleMovieSelect(movie) {
      this.selectedMovie = movie
    }
  }
}
</script>

添加搜索功能

扩展功能添加电影搜索:

vue实现电影选择

<template>
  <div class="movie-selector">
    <input 
      type="text" 
      v-model="searchQuery" 
      placeholder="搜索电影..."
      @input="searchMovies"
    >
    <!-- 原有组件 -->
  </div>
</template>

<script>
export default {
  data() {
    return {
      searchQuery: ''
    }
  },
  methods: {
    searchMovies() {
      if (this.searchQuery.trim() === '') {
        this.fetchMovies()
      } else {
        // 实际项目中这里应该是API调用
        this.movies = this.allMovies.filter(movie => 
          movie.title.toLowerCase().includes(this.searchQuery.toLowerCase())
        )
      }
    }
  }
}
</script>

使用Vuex管理状态

对于更复杂的应用,可以使用Vuex管理电影状态:

// store.js
import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

export default new Vuex.Store({
  state: {
    movies: [],
    selectedMovie: null
  },
  mutations: {
    SET_MOVIES(state, movies) {
      state.movies = movies
    },
    SELECT_MOVIE(state, movie) {
      state.selectedMovie = movie
    }
  },
  actions: {
    fetchMovies({ commit }) {
      // API调用
      commit('SET_MOVIES', moviesData)
    }
  }
})

样式优化

添加基本样式增强用户体验:

.movie-list {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
  gap: 20px;
}

.movie-list div {
  cursor: pointer;
  transition: transform 0.2s;
}

.movie-list div:hover {
  transform: scale(1.05);
}

.selected {
  border: 2px solid #42b983;
  border-radius: 5px;
}

.movie-details {
  margin-top: 30px;
  padding: 20px;
  background: #f5f5f5;
  border-radius: 5px;
}

input {
  padding: 10px;
  width: 100%;
  margin-bottom: 20px;
  border: 1px solid #ddd;
  border-radius: 4px;
}

通过以上方法可以实现一个完整的电影选择功能,包括列表展示、详情查看和搜索功能。实际项目中可以连接真实API获取电影数据,并根据需求扩展更多功能如分类筛选、收藏等。

标签: 电影vue
分享给朋友:

相关文章

vue nexttick实现

vue nexttick实现

Vue 中 nextTick 的实现原理 Vue 的 nextTick 是一个用于在下次 DOM 更新循环结束之后执行延迟回调的方法。它的核心实现依赖于 JavaScript 的事件循环机制。…

vue实现滚屏

vue实现滚屏

实现滚屏的基本方法 在Vue中实现滚屏效果可以通过多种方式完成,常见的有原生JavaScript滚动方法、第三方库或CSS动画。以下是几种常见实现方式: 使用window.scrollTo或Elem…

vue广播实现

vue广播实现

vue广播实现 在Vue中实现广播功能可以通过事件总线(Event Bus)或Vuex来完成。以下是两种常见的实现方式: 使用事件总线(Event Bus) 事件总线是一种简单的跨组件通信方式,适用…

vue怎么实现onclick

vue怎么实现onclick

在Vue中实现点击事件(类似原生onclick)可以通过多种方式完成,以下是常见方法: 使用 v-on 指令 Vue提供了v-on指令绑定DOM事件,简写为@。例如绑定点击事件: <butt…

vue实现搜索提示

vue实现搜索提示

Vue实现搜索提示的方法 使用v-model绑定输入框 通过v-model将输入框的值与Vue实例中的数据进行双向绑定,实时获取用户输入内容。 <input v-model="searchQu…

vue实现文字复制

vue实现文字复制

Vue 实现文字复制的几种方法 使用 Clipboard API 在 Vue 中可以通过调用浏览器的 Clipboard API 实现文字复制功能。该方法兼容现代浏览器,无需额外依赖。 method…