当前位置:首页 > 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组件中设计一个表单,包含用户名、邮箱、密码等字段。使用v-model指令实现双向数据绑定,将表单输入与组件的数据属性关联起来。 <t…

vue实现论坛功能

vue实现论坛功能

实现论坛功能的核心模块 论坛功能通常包含用户发帖、回帖、分类浏览、搜索等核心模块。Vue.js 作为前端框架,需配合后端 API 实现数据交互。 基础项目结构搭建 使用 Vue CLI 或 Vite…

vue怎么实现功能

vue怎么实现功能

Vue 是一个渐进式 JavaScript 框架,常用于构建用户界面。以下是一些常见的功能实现方法: 数据绑定 Vue 通过 v-model 实现双向数据绑定,适用于表单输入等场景: <te…

vue实现电影选择

vue实现电影选择

Vue实现电影选择功能 使用Vue实现电影选择功能需要结合数据绑定、事件处理和组件化思想。以下是一个完整的实现方案: 数据准备 在Vue实例的data中定义电影列表和选中状态: data() {…

php实现评论功能

php实现评论功能

数据库设计 创建评论表(示例结构): CREATE TABLE `comments` ( `id` int(11) NOT NULL AUTO_INCREMENT, `user_id`…

vue实现表情功能

vue实现表情功能

实现表情功能的基本思路 在Vue中实现表情功能通常涉及表情选择器的UI组件开发、表情数据的存储与渲染,以及用户输入与表情的交互逻辑。以下是具体实现方法: 表情数据准备 准备一个表情符号的数组或对象,…