当前位置:首页 > VUE

vue实现得猫眼

2026-01-19 13:16:21VUE

Vue 实现猫眼电影功能

Vue 可以用来实现类似猫眼电影的功能,包括电影列表展示、详情页、购票功能等。以下是实现的关键步骤和技术要点。

项目初始化

使用 Vue CLI 或 Vite 初始化项目,安装必要的依赖:

npm create vue@latest maoyan-app
cd maoyan-app
npm install axios vue-router pinia

路由配置

src/router/index.js 中配置路由:

import { createRouter, createWebHistory } from 'vue-router'
import Home from '../views/Home.vue'
import MovieDetail from '../views/MovieDetail.vue'

const routes = [
  { path: '/', component: Home },
  { path: '/movie/:id', component: MovieDetail }
]

const router = createRouter({
  history: createWebHistory(),
  routes
})

export default router

状态管理

使用 Pinia 管理全局状态,创建 src/stores/movie.js

vue实现得猫眼

import { defineStore } from 'pinia'
import { ref } from 'vue'
import axios from 'axios'

export const useMovieStore = defineStore('movie', () => {
  const movies = ref([])

  async function fetchMovies() {
    const res = await axios.get('https://api.example.com/movies')
    movies.value = res.data
  }

  return { movies, fetchMovies }
})

电影列表组件

创建 src/components/MovieList.vue

<template>
  <div class="movie-list">
    <div v-for="movie in movies" :key="movie.id" class="movie-item">
      <img :src="movie.poster" :alt="movie.title">
      <h3>{{ movie.title }}</h3>
      <p>评分:{{ movie.rating }}</p>
    </div>
  </div>
</template>

<script setup>
import { useMovieStore } from '../stores/movie'
import { onMounted } from 'vue'

const store = useMovieStore()
const { movies } = store

onMounted(() => {
  store.fetchMovies()
})
</script>

电影详情页

创建 src/views/MovieDetail.vue

<template>
  <div v-if="movie">
    <h1>{{ movie.title }}</h1>
    <img :src="movie.poster" class="detail-poster">
    <p>导演:{{ movie.director }}</p>
    <p>主演:{{ movie.cast }}</p>
    <p>评分:{{ movie.rating }}</p>
    <button @click="showCinemas">立即购票</button>
  </div>
</template>

<script setup>
import { ref } from 'vue'
import { useRoute } from 'vue-router'
import axios from 'axios'

const route = useRoute()
const movie = ref(null)

axios.get(`https://api.example.com/movies/${route.params.id}`)
  .then(res => {
    movie.value = res.data
  })
</script>

API 请求封装

创建 src/api/movie.js 封装 API 请求:

vue实现得猫眼

import axios from 'axios'

const instance = axios.create({
  baseURL: 'https://api.example.com',
  timeout: 5000
})

export const getMovies = () => instance.get('/movies')
export const getMovieById = id => instance.get(`/movies/${id}`)

样式设计

使用 CSS 或 UI 库(如 Element Plus)美化界面:

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

.detail-poster {
  max-width: 300px;
  border-radius: 8px;
}

部署上线

构建项目并部署到服务器:

npm run build

将生成的 dist 文件夹内容上传到 Web 服务器或使用 Vercel、Netlify 等平台部署。

通过以上步骤,可以构建一个基本的猫眼电影类应用。实际开发中需要对接真实的数据接口,并添加更多功能如影院选择、座位选择、支付等。

标签: 猫眼vue
分享给朋友:

相关文章

vue实现全文检索

vue实现全文检索

Vue 实现全文检索的方法 客户端全文检索(适用于小型数据集) 使用 flexsearch 或 lunr.js 等轻量级库实现前端全文检索: import FlexSearch from 'flex…

vue实现选择季度

vue实现选择季度

Vue 实现选择季度的几种方法 使用下拉选择框(Select) 在 Vue 中可以通过 v-model 绑定一个下拉选择框来实现季度选择。数据可以预先定义为一个包含季度选项的数组。 <temp…

vue实现缩放

vue实现缩放

Vue 实现缩放的方法 在 Vue 中实现缩放功能可以通过多种方式完成,以下是一些常见的方法: 使用 CSS transform 属性 通过 CSS 的 transform: scale() 属性可…

vue分类实现

vue分类实现

Vue分类实现方法 在Vue中实现分类功能通常涉及数据分组、动态渲染和交互逻辑。以下是几种常见的实现方式: 基于计算属性的分类 通过计算属性对原始数据进行分组处理,适合静态或少量数据分类: com…

vue代理实现

vue代理实现

Vue 代理实现方法 在 Vue 项目中,配置代理可以解决开发环境下的跨域问题,通常通过修改 vue.config.js 文件实现。以下是几种常见的代理配置方式: 基础代理配置 在 vue.conf…

vue弹幕实现

vue弹幕实现

Vue弹幕实现方法 弹幕功能常见于视频直播或评论区,以下是基于Vue的实现方案,涵盖基础弹幕、动画控制及性能优化。 基础弹幕渲染 通过v-for动态渲染弹幕列表,结合CSS实现横向移动效果。…