Vue 正在热映模块

Vue 渐进式JavaScript 框架 基于Vue2的移动端项目:正在热映模块

目录

正在热映

数据修改

导入axios

配置反向代理

正在热映渲染

赋值数据

渲染列表

显示图片

优化列表

设置列表样式

主演

定义过滤器

使用过滤器

主演过长处理

无主演情况处理

观众评分

总结


正在热映

数据修改

修改获取正在热映NowPlaying页面数据的方式和数据源。

导入axios

原来的datalist数据是写的死数据,改为通过axios请求后端接口数据。

并设置请求头。示例如下:

html 复制代码
<script>
import axios from 'axios'
export default {
  data () {
    return {
      datalist: ['春眠不觉晓', '处处闻啼鸟', '夜来风雨声', '花落知多少']
    }
  },
  mounted () {
    axios({
      url: '/api/gateway?cityId=130100&pageNum=1&pageSize=10&type=2&k=34098',
      headers: {
        'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0.3 Mobile/15E148 Safari/604.1',
        'X-Host': 'mall.film-ticket.film.list',
        'X-Client-Info': '{"a":"3000","ch":"1002","v":"5.2.1","e":"17479694011920413022027777"}'
      }
    }).then(res => {
      console.log(res.data)
    })
  },
  methods: {
    handleChangePage (id) {

      // 通过命名路由跳转
      this.$router.push({
        name: 'detail',
        params: {
          id
        }
      })
    }
  }
}
</script>
配置反向代理

解决跨域方式

接口需要设置允许跨域,前端或后端设置都可以;或者反向代理。

目前解决跨域问题,在vue.config配置反向代理。

凡是向api开头的请求路径就会进行转发请求。

示例如下:

javascript 复制代码
const path = require('path')

// 解析路径的函数
const resolve = dir => {
  return path.join(__dirname, dir)
}

module.exports = {
  lintOnSave: false, // 检查语法格式
  // 配置反向代理
  devServer: {
    proxy: {
      '/api': {
        target: 'https://m.maizuo.com',
        changeOrigin: true,
        pathRewrite: { '/api': '' } // 重写路径
      }
    }
  },
  configureWebpack: {
    resolve: {
      alias: {
        '@': resolve('src'),
        _mycom: resolve('src/mycomponents') // 将_mycom映射到src/mycomponents
      }
    }
  }
}

控制台打印数据

正在热映渲染

赋值数据

在NowPlaying页面在data函数中先把datalist置空为空数组,

然后在接口获取数据后,进行赋值。

示例如下:

渲染列表

修改原有渲染列表代码。

示例如下:

html 复制代码
<template>
    <div>
        nowplaying
        <ul>
            <li v-for="data in datalist" :key="data.filmId"
            @click="handleChangePage(data.filmId)">
                {{data.name}}
            </li>
        </ul>
    </div>
</template>
显示图片

在原来的列表渲染上,增加电影封面显示;

增加img标签,动态绑定图片路径。

示例如下:

html 复制代码
<template>
    <div>
        nowplaying
        <ul>
            <li v-for="data in datalist" :key="data.filmId"
            @click="handleChangePage(data.filmId)">
                <img :src="data.poster" alt="">
                {{data.name}}
            </li>
        </ul>
    </div>
</template>
优化列表

优化列表样式和元素排列组合。

示例如下:

html 复制代码
<template>
    <div>
        <ul>
            <li v-for="data in datalist" :key="data.filmId"
            @click="handleChangePage(data.filmId)">
                <img :src="data.poster" alt="">
                <div class="play_info">
                  <div class="title">{{data.name}}</div>
                  <div class="content">
                    <div>观众评分:<span style="color:red">{{data.grade}}</span></div>
                    <div>主演:{{data.actors}}</div>
                    <div>
                      {{data.nation}} | {{data.runtime}}分钟
                    </div>
                  </div>
                </div>
            </li>
        </ul>
    </div>
</template>
设置列表样式

对列表中的影片封面、标题、内容设置样式。

示例如下:

html 复制代码
<style lang="scss" scoped>
ul{
  li{
    overflow:hidden;
    padding: .833333rem;
    img {
      width: 3.6666667rem;
      height: 5.2222rem;
      float: left;
    }
    .play_info {
      float:left;
      padding-left: 10px;
    }
    .title {
      font-size: 16px;
    }
    .content {
      font-size: 13px;
      color:gray;
    }
  }
}
</style>
主演

主演部分因为是列表结构,需要使用过滤器来处理主演变成字符串,

而后显示在列表中。

定义过滤器

在当前页面定义过滤器,示例如下:

javascript 复制代码
import Vue from 'vue'

// 定义过滤器处理主演名称
Vue.filter('actorName', (data) => {
  return data.map(item => item.name).join(' ')
})
使用过滤器

直接在主演后面使用过滤器。示例如下:

html 复制代码
<div>主演:{{data.actors | actorName}}</div>
主演过长处理

当主演过长时,通过设置样式超过盒子长度直接进行隐藏。

示例如下:

设置类

html 复制代码
<div class="actors">主演:{{data.actors | actorName}}</div>

设置样式

css 复制代码
.content {
      font-size: 13px;
      color:gray;
      .actors {
        overflow: hidden;
        text-overflow: ellipsis;
        white-space: nowrap;
        width: 11.6333rem;
      }
    }
无主演情况处理

过滤器处理时,增加参数判断。

示例如下:

javascript 复制代码
Vue.filter('actorName', (data) => {
  if (data === undefined) return '暂无主演'
  return data.map(item => item.name).join(' ')
})
观众评分

观众评分不存在,则不显示,但仍占位。

示例如下:

html 复制代码
<div :class="data.grade ? '' : 'hidden'">观众评分:
<span style="color:red">{{data.grade}}</span></div>

设置隐藏样式

css 复制代码
.hidden {
  visibility: hidden;
}

盒子高度修改

在app.vue中设置整个列表 距底部49px。

html 复制代码
<template>
  <div>
    <tabbar></tabbar>
    <!-- 路由容器 -->
    <section>
      <router-view></router-view>
    </section>
  </div>
</template>

设置样式

css 复制代码
section {
  padding-bottom: 2.7222rem;
}

总结

Vue 渐进式JavaScript 框架 基于Vue2的移动端项目:正在热映模块

相关推荐
威迪斯特44 分钟前
Flask:轻量级Web框架的技术本质与工程实践
前端·数据库·后端·python·flask·开发框架·核心架构
Hello.Reader1 小时前
Flink 文件系统通用配置默认文件系统与连接数限制实战
vue.js·flink·npm
wuhen_n1 小时前
JavaScript内置数据结构
开发语言·前端·javascript·数据结构
大鱼前端1 小时前
为什么我说CSS-in-JS是前端“最佳”的糟粕设计?
前端
不爱吃糖的程序媛1 小时前
Capacitor:跨平台Web原生应用开发利器,现已全面适配鸿蒙
前端·华为·harmonyos
AC赳赳老秦1 小时前
2026国产算力新周期:DeepSeek实战适配英伟达H200,引领大模型训练效率跃升
大数据·前端·人工智能·算法·tidb·memcache·deepseek
CHU7290351 小时前
淘宝扭蛋机抽盒小程序前端功能解析:解锁趣味抽盒新体验
前端·小程序
-凌凌漆-1 小时前
【npm】npm的-D选项介绍
前端·npm·node.js
鹿心肺语2 小时前
前端HTML转PDF的两种主流方案深度解析
前端·javascript
海石2 小时前
去到比北方更北的地方—2025年终总结
前端·ai编程·年终总结