Vue 详情模块 1

Vue 渐进式JavaScript 框架 基于Vue2的移动端项目:详情数据,吸顶效果及axios封装

目录

详情

详情吸顶

详情数据

Axios初次封装

创建http.js

封装方式1

封装请求函数

使用请求函数

封装方式2

封装

调用

总结


详情

详情吸顶

实现吸顶效果:下划时,tab页被置顶在页面顶部。

使用粘性定位,当top等于0px时,固定在顶部。

在filmsView.vue中对film-header组件设置类样式。

示例如下:

<film-header class="sticky"></film-header>

类样式设定

<style lang="scss" scoped>
.filmSwiperItem {
  img {
    width: 100%;
  }
}
.sticky {
  position: sticky;
  top: 0;
  background: white;
}
</style>

说明:

position: sticky 是 CSS 的一种定位方式,

结合了相对定位(relative)和固定定位(fixed)的特性,

使元素在滚动到指定位置时固定显示。

它常用于实现导航栏吸顶、侧边栏固定等效果,

需配合 top、bottom 等偏移属性使用,

并依赖父容器的滚动机制。

吸顶效果:

详情数据

在详情detailView.vue页面的created函数中使用axios请求后端接口获取数据。

把前面页面传递过来的参数id,拼接到请求路径中。

注意:需要重新复制一下header中的那两个参数,与原来的header设置有所不同。

示例如下:

import axios from 'axios'

export default {
  created () {
    // 当前匹配的路由
    console.log('created', this.$route.params.id)
    // axios 利用 id发请求到详情接口,获取详情数据,布局页面
    axios({
      url: `/api/gateway?filmId=${this.$route.params.id}&k=6027054`,
      headers: {
        'X-Host': 'mall.film-ticket.film.info',
        'X-Client-Info': '{"a":"3000","ch":"1002","v":"5.2.1","e":"17479694011920413022027777","bc":"130100"}'
      }
    }).then(res => {
      console.log(res.data)
      
    })
  }
}

Axios初次封装

接口的请求有很多都是公共的可以封装起来。

创建http.js

在src下创建util文件夹,在文件夹中再创建http.js文件。

封装方式1
封装请求函数

对于数据请求的封装,封装为专用的函数。

示例如下:

import axios from 'axios'

function httpForList () {
  return axios({
    url: '/api/gateway?cityId=130100&pageNum=1&pageSize=10&type=1&k=8043159',
    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"}'
    }
  })
}

function httpForDetail (id) {
  return axios({
    url: `/api/gateway?filmId=${id}&k=6027054`,
    headers: {
      'X-Host': 'mall.film-ticket.film.info',
      'X-Client-Info': '{"a":"3000","ch":"1002","v":"5.2.1","e":"17479694011920413022027777","bc":"130100"}'
    }
  })
}

export default {
  httpForList,
  httpForDetail
}

 

使用请求函数

使用的时候,先引入http.js,然后调用就可以了。

修改原有NowPlaying页面请求。

示例如下:

import Vue from 'vue'
import http from '@/util/http'

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

export default {
  data () {
    return {
      datalist: []
    }
  },
  mounted () {
    http.httpForList().then((res) => {
      this.datalist = res.data.data.films
    })
  },

封装方式2
封装
import axios from 'axios'

const http = axios.create({
  baseURL: '',
  timeout: 10000,
  headers: {
    'X-Host': 'mall.film-ticket.film.list',
    'X-Client-Info': '{"a":"3000","ch":"1002","v":"5.2.1","e":"17479694011920413022027777"}'
  }
})

export default http
调用
import Vue from 'vue'
import http from '@/util/http'

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

export default {
  data () {
    return {
      datalist: []
    }
  },
  mounted () {
    http({
      url: '/api/gateway?cityId=130100&pageNum=1&pageSize=10&type=1&k=8043159',
      headers: {
        'X-Host': 'mall.film-ticket.film.list'
      }
    }).then(res => {
      // console.log(res.data)
      this.datalist = res.data.data.films
    })
  },

总结

Vue 渐进式JavaScript 框架 基于Vue2的移动端项目:详情数据,吸顶效果及axios封装

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

JSON_L

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值