当前位置:首页 > VUE

vue电影功能实现

2026-03-07 19:17:31VUE

Vue 电影功能实现

数据获取与展示

通过 Vue 的 axiosfetch 从电影 API 获取数据。常见的免费 API 包括 TMDb、OMDb。创建一个 movies 数组存储数据,使用 v-for 在模板中循环渲染电影列表。

<template>
  <div>
    <div v-for="movie in movies" :key="movie.id">
      <h3>{{ movie.title }}</h3>
      <img :src="movie.poster" alt="Poster">
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      movies: []
    };
  },
  async created() {
    const response = await axios.get('API_URL');
    this.movies = response.data.results;
  }
};
</script>

搜索功能

添加搜索输入框,使用 v-model 绑定搜索关键词。通过计算属性或方法过滤电影列表。

<template>
  <input v-model="searchQuery" placeholder="Search movies">
  <div v-for="movie in filteredMovies" :key="movie.id">
    <h3>{{ movie.title }}</h3>
  </div>
</template>

<script>
export default {
  data() {
    return {
      searchQuery: '',
      movies: []
    };
  },
  computed: {
    filteredMovies() {
      return this.movies.filter(movie =>
        movie.title.toLowerCase().includes(this.searchQuery.toLowerCase())
      );
    }
  }
};
</script>

分页功能

使用分页组件或手动实现分页逻辑。计算总页数,根据当前页码切片显示数据。

<template>
  <div v-for="movie in paginatedMovies" :key="movie.id">
    <h3>{{ movie.title }}</h3>
  </div>
  <button @click="prevPage">Previous</button>
  <button @click="nextPage">Next</button>
</template>

<script>
export default {
  data() {
    return {
      currentPage: 1,
      itemsPerPage: 10,
      movies: []
    };
  },
  computed: {
    paginatedMovies() {
      const start = (this.currentPage - 1) * this.itemsPerPage;
      const end = start + this.itemsPerPage;
      return this.movies.slice(start, end);
    }
  },
  methods: {
    nextPage() {
      if (this.currentPage * this.itemsPerPage < this.movies.length) {
        this.currentPage++;
      }
    },
    prevPage() {
      if (this.currentPage > 1) {
        this.currentPage--;
      }
    }
  }
};
</script>

电影详情页

使用 Vue Router 实现路由跳转。创建详情页组件,通过路由参数获取电影 ID,并显示详细信息。

// router.js
const routes = [
  { path: '/movie/:id', component: MovieDetail }
];

// MovieDetail.vue
<template>
  <div>
    <h1>{{ movie.title }}</h1>
    <p>{{ movie.overview }}</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      movie: {}
    };
  },
  async created() {
    const id = this.$route.params.id;
    const response = await axios.get(`API_URL/${id}`);
    this.movie = response.data;
  }
};
</script>

状态管理

对于复杂应用,使用 Vuex 管理电影数据状态。创建 store 模块处理电影数据的获取、搜索和分页。

vue电影功能实现

// store.js
export default new Vuex.Store({
  state: {
    movies: [],
    searchQuery: ''
  },
  mutations: {
    setMovies(state, movies) {
      state.movies = movies;
    },
    setSearchQuery(state, query) {
      state.searchQuery = query;
    }
  },
  actions: {
    async fetchMovies({ commit }) {
      const response = await axios.get('API_URL');
      commit('setMovies', response.data.results);
    }
  },
  getters: {
    filteredMovies: state => {
      return state.movies.filter(movie =>
        movie.title.toLowerCase().includes(state.searchQuery.toLowerCase())
      );
    }
  }
});

通过以上方法,可以实现一个功能完整的电影应用,包括数据展示、搜索、分页和详情查看等功能。

标签: 功能电影
分享给朋友:

相关文章

vue实现答题功能

vue实现答题功能

Vue实现答题功能的基本思路 在Vue中实现答题功能通常需要以下几个核心模块:题目数据管理、用户交互处理、答题状态跟踪和结果计算。通过组件化开发可以更好地组织代码结构。 数据结构设计 答题功能的基础…

uniapp实现支付功能

uniapp实现支付功能

支付功能实现概述 在UniApp中实现支付功能通常需要对接第三方支付平台(如微信支付、支付宝支付等)。以下是基于微信支付和支付宝支付的通用实现流程。 微信支付实现步骤 1. 配置支付权限 在微信开放…

vue实现按钮实现点击功能

vue实现按钮实现点击功能

实现按钮点击功能 在Vue中实现按钮点击功能可以通过v-on指令或@缩写来绑定事件。以下是几种常见的实现方式: 使用v-on指令 通过v-on:click绑定点击事件,触发定义在methods中的方…

vue实现收货功能

vue实现收货功能

实现收货功能的基本思路 在Vue中实现收货功能通常涉及前端界面交互、后端API调用以及状态管理。以下是关键步骤和代码示例: 页面布局与数据绑定 使用Vue的模板语法构建收货表单,包含收货人、联系方式…

vue实现功能插件

vue实现功能插件

Vue 功能插件实现方法 插件基本结构 Vue 插件通常需要暴露一个 install 方法,该方法接收 Vue 构造函数作为参数。基本结构如下: const MyPlugin = { insta…

vue实现付费功能

vue实现付费功能

Vue 实现付费功能的方法 集成第三方支付平台 选择适合的第三方支付平台(如支付宝、微信支付、Stripe、PayPal等),并按照其文档进行集成。在 Vue 项目中,可以通过引入支付平台的 SDK…