Vue基础教程(210)电影购票APP开发实战之系统运行效果:代码如票,手把手带你用Vue搞出电影APP——附完整可跑源码

一、 为啥偏要跟Vue死磕电影APP?

如果你学Vue还停留在啃文档、抄TodoList,小心变成“理论王者,实战青铜”!电影购票APP这玩意儿,简直是为Vue量身定做的秀场:

  • 响应式刺激体验:座位一点、购物车秒变,数据驱动视图的爽感直接拉满;
  • 组件化高能现场:影片卡片、场次选择、支付弹窗…全是活生生的组件复用好案例;
  • 状态管理初体验:不用Vuex也hold得住,为后续进阶埋好钩子。

说白了,这项目能让你把Vue的核心技能——数据绑定、组件通信、条件渲染——全盘摸透,学完直接塞进简历,香!


二、 电影APP长啥样?先瞅一眼成品效果

咱不画饼,直接上图(脑补一下):

  • 首页:顶部导航栏+海报轮播,影片列表网格排列,每个影片卡片带评分和“购票”按钮;
  • 选座页:屏幕效果图居中,底下是座位矩阵——已售的灰掉、可选的点中变绿、自己选的亮橙色;
  • 购物车:悬浮在右下角,实时显示票数和总价,点开能删改。

关键交互亮点

  • 选座时,座位图无刷新实时更新——Vue响应式直接立功;
  • 购物车金额随选择自动秒算,告别手动刷新;
  • 影片筛选按“热映”“待映”Tab切换,内容流畅更替。

这些效果背后,全是Vue基础语法的骚操作,接下来咱们直接扒代码!


三、 核心代码拆解:Vue基础语法实战全揭秘

1. 影片列表渲染(v-for + :class动态样式)

影片数据长这样:

data() {
  return {
    movies: [
      { id: 1, name: "奥本海默", score: 8.8, poster: "url1", type: "hot" },
      { id: 2, name: "封神", score: 7.9, poster: "url2", type: "hot" },
      { id: 3, name: "志愿军", score: "待映", poster: "url3", type: "coming" }
    ]
  }
}

v-for循环渲染,加上条件判断显示不同标签:

<div class="movie-list">
  <div v-for="movie in movies" :key="movie.id" class="movie-card">
    <img :src="movie.poster" />
    <h3>{{ movie.name }}</h3>
    <span :class="['score', movie.score === '待映' ? 'coming' : 'hot']">
      {{ movie.score }}
    </span>
    <button @click="buyTicket(movie)">购票</button>
  </div>
</div>

注意这里:class的绑定:动态根据评分类型切换样式——Vue的数据驱动UI就这样悄咪咪实现了!

2. 座位选择心跳时刻(计算属性 + 方法处理)

座位数据设计成二维数组,模拟真实场景:

data() {
  return {
    seats: [
      [{ id: '1-1', status: 0 }, { id: '1-2', status: 1 }], // 0可选 1已售 2已选
      [{ id: '2-1', status: 0 }, { id: '2-2', status: 0 }]
    ],
    selectedSeats: []
  }
}

模板里双层v-for渲染座位图:

<div class="seat-map">
  <div v-for="(row, rowIndex) in seats" :key="rowIndex" class="seat-row">
    <div 
      v-for="seat in row" 
      :key="seat.id"
      :class="['seat', `status-${seat.status}`]"
      @click="selectSeat(seat)">
      {{ seat.id.split('-')[1] }}
    </div>
  </div>
</div>

点击座位触发方法:

methods: {
  selectSeat(seat) {
    if (seat.status === 1) return; // 已售不可选
    const index = this.selectedSeats.findIndex(s => s.id === seat.id);
    if (index > -1) {
      // 已选则取消
      this.selectedSeats.splice(index, 1);
      seat.status = 0;
    } else {
      // 未选则添加
      this.selectedSeats.push(seat);
      seat.status = 2;
    }
  }
}

这里直接修改了seat.status——因为Vue对响应式数据监听,状态一变,视图自动更新!这就是Vue的魔法所在。

3. 购物车实时计算(计算属性大显神通)

购物车不需要单独维护,直接基于selectedSeats计算:

computed: {
  totalPrice() {
    return this.selectedSeats.length * 35; // 假设每张35元
  },
  cartText() {
    const count = this.selectedSeats.length;
    return count ? `购票${count}张 ¥${this.totalPrice}` : '未选座';
  }
}

在模板中直接使用:

<div class="cart">
  <button :class="{ active: selectedSeats.length }">
    {{ cartText }}
  </button>
</div>

计算属性的好处:依赖数据变,结果自动更新——免手动维护,真香!


四、 开发避坑指南:新手常翻车点

  1. v-for忘了写:key:控制台会警告,列表更新可能紊乱——用唯一id当key!
  2. 响应式数据直接赋值:数组用push、对象用Vue.set,别直接=`[](可用this.movies = [...newList]`)。
  3. 方法内this指向跑偏:箭头函数慎用,确保this指向组件实例。
  4. 组件通信懵圈:父子用props+$emit,兄弟用事件总线或Vuex。

五、 完整示例+源码获取

由于篇幅,这里贴关键代码,但完整可运行示例已打包(包含Vue组件拆分、路由配置、样式源码)。

项目结构如下:

movie-app/
  ├── src/
  │    ├── components/
  │    │     ├── MovieList.vue
  │    │     ├── SeatMap.vue
  │    │     └── ShoppingCart.vue
  │    ├── views/
  │    │     ├── Home.vue
  │    │     └── SelectSeat.vue
  │    └── App.vue
  └── public/index.html

获取方式:在评论区喊“Vue电影票我全都要!”(开玩笑~),直接私信我发你GitHub地址,代码拉下来npm install && npm run serve就能跑!


六、 总结:Vue基础这样学才够劲

通过这个电影APP,你会发现:

  • Vue的核心不是背API,而是理解“数据变,视图跟着变”的哲学;
  • 实战的价值在于把散装知识点串成解决实际问题的能力链;
  • 编程的乐趣就在看到自己写的代码能跑出真实可用的产品。

下次面试被问Vue实战,别只说TodoList了——把电影购票APP拍出来,效果炸裂!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

值引力

持续创作,多谢支持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值