uniapp实战仿写网易云音乐(二)—promise接口请求的封装和主页功能的实现,组件封装
创始人
2024-04-22 14:29:46
0

文章目录

    • 前言
    • promise请求接口的封装
    • 主入口功能的实现:
    • 推荐歌单模块
    • 新碟新歌模块
    • 精选视频模块
    • 最后

前言

本篇文章继续完成上篇文章的部分,主要实现prromise接口的封装和首页主入口的实现

promise请求接口的封装

在上篇文章中请求我们是这样写的:

methods: {getBanner() {uni.request({url: 'http://localhost:3000/banner',method: 'GET',success:(res)=>{this.swiper = res.data.banners;}})}
}

但实际开发中,接口非常多,这样又不方便管理,所以我们通常会进行接口的封装
先新建util文件夹中request.js文件,在文件中进行promise的封装:
在这里插入图片描述

封装里面的状态码根据实际情况写,我这里写简单写了几个

/*** 请求组件封装* @param {Object} url 请求地址 /banner* @param {Object} data 请求参数* @param {Object} method 请求的方法* @param {Object} contentType 请求内容类型 1=json  2=form*/
function request({url, data, method="GET", contentType=1}) {let header = {'content-type': contentType === 1 ? 'application/json' : 'application/x-www-form-urlencoded'}let baseUrl = "http://localhost:3000";return new Promise((resolve, reject)=>{uni.request({url: baseUrl + url,data,method,header,success: (res) => {if (res.statusCode === 200) {//请求成功resolve(res.data);} else if (res.statusCode === 401) {uni.showToast({icon: 'none',title: "未登录或登录状态已超时",duration: 1500});} else if (res.statusCode === 405) {uni.showToast({icon: 'none',title: "请求方法错误",duration: 1500});} else {uni.showToast({icon: 'none',title: "请求错误:" + res.statusCode,duration: 1500});}},fail: (err) => {console.log("err:", err)uni.showToast({icon: 'none',title: err.errMsg,duration: 1500});reject(err);}})})
}
export default {request}

然后我们可以新建api文件夹新建index.js文件在里面进行api的封装
在这里插入图片描述

import request from "@/utils/request.js"//轮播请求接口
export function apiGetBanner(data) {return request.request({url: '/banner',method: 'GET',data})
}

封装之后,在我们需要的页面就可以直接引入api进行使用,例如:


主入口功能的实现:

下面来实现这一块的内容,首页的主入口部分
在这里插入图片描述
这一块的内容基本不会改动,所以直接用图片样式进行编写
这主要是把本地的图片渲染出来,css部分直接用flex布局拿很简单。

{{item.name}}

推荐歌单模块

推荐歌单这块直接抽离成一个组件进行编写
在这里插入图片描述
在components文件夹下新建文件,编写歌单的组件

在这里插入图片描述
css样式我就不贴了,主要是写好组件,然后定义props接受父组件传过来的值


在父组件中:


进行数据的请求,这里需要把请求数据中的播放量进行一个格式化

//推荐歌单
getRecommendSongs(){const params = {limit: 6}apiGetRecommendSongs(params).then(res => {//格式化播放量数据const formatCount = data=>{let tmp = data;if (data > 10000) {tmp = (parseInt(data/10000) + '万');}return tmp}this.recommendSongs = res.result;//格式化this.recommendSongs.forEach(item => {item.playCount = formatCount(item.playCount);})})
},

新碟新歌模块

这一块要实现一个可以点击切换的效果:
在这里插入图片描述


新碟新歌{{item.name}}{{item.artist.name}}

这里就是通过点击切换判断是新歌还是新碟,然后进行请求数据

// 切换新碟新歌
switchTab(type) {this.newType = type;// 设定开始start和结束end的位置let temp = {s: type == 1 ? 0 : 3,                  e: type == 1 ? 3 : 6}this.latestAlbum = this.latestTempAlbum.slice(temp.s, temp.e);
},
//新碟新歌  把前3首歌--新碟  后3首--新歌
getLatestAlbum() {apiGetTopAlbum().then(res=>{//将所有的数据暂存在临时变量中this.latestTempAlbum = res.albums;//取前3个作为第一类的数据展示this.latestAlbum = res.albums.slice(0, 3);})
},

精选视频模块

视频这款暂时做了封面,没有做视频播放功能,直接渲染封面:
在这里插入图片描述


精选视频更多{{item.title}}

//精选视频getRelatedVideo() {const params = {id: 32154      //根据资源id查询}apiGetRelatedVideo(params).then(res=>{// console.log(res)this.relatedVideo = res.data;})}

最后

到此首页基本实现了
在这里插入图片描述
后续会继续完成其他页面,持续更新,感兴趣可以订阅本专栏

在这里插入图片描述

相关内容

热门资讯

【MySQL】锁 锁 文章目录锁全局锁表级锁表锁元数据锁(MDL)意向锁AUTO-INC锁...
【内网安全】 隧道搭建穿透上线... 文章目录内网穿透-Ngrok-入门-上线1、服务端配置:2、客户端连接服务端ÿ...
GCN的几种模型复现笔记 引言 本篇笔记紧接上文,主要是上一篇看写了快2w字,再去接入代码感觉有点...
数据分页展示逻辑 import java.util.Arrays;import java.util.List;impo...
Redis为什么选择单线程?R... 目录专栏导读一、Redis版本迭代二、Redis4.0之前为什么一直采用单线程?三、R...
【已解决】ERROR: Cou... 正确指令: pip install pyyaml
关于测试,我发现了哪些新大陆 关于测试 平常也只是听说过一些关于测试的术语,但并没有使用过测试工具。偶然看到编程老师...
Lock 接口解读 前置知识点Synchronized synchronized 是 Java 中的关键字,...
Win7 专业版安装中文包、汉... 参考资料:http://www.metsky.com/archives/350.htm...
3 ROS1通讯编程提高(1) 3 ROS1通讯编程提高3.1 使用VS Code编译ROS13.1.1 VS Code的安装和配置...
大模型未来趋势 大模型是人工智能领域的重要发展趋势之一,未来有着广阔的应用前景和发展空间。以下是大模型未来的趋势和展...
python实战应用讲解-【n... 目录 如何在Python中计算残余的平方和 方法1:使用其Base公式 方法2:使用statsmod...
学习u-boot 需要了解的m... 一、常用函数 1. origin 函数 origin 函数的返回值就是变量来源。使用格式如下...
常用python爬虫库介绍与简... 通用 urllib -网络库(stdlib)。 requests -网络库。 grab – 网络库&...
药品批准文号查询|药融云-中国... 药品批文是国家食品药品监督管理局(NMPA)对药品的审评和批准的证明文件...
【2023-03-22】SRS... 【2023-03-22】SRS推流搭配FFmpeg实现目标检测 说明: 外侧测试使用SRS播放器测...
有限元三角形单元的等效节点力 文章目录前言一、重新复习一下有限元三角形单元的理论1、三角形单元的形函数(Nÿ...
初级算法-哈希表 主要记录算法和数据结构学习笔记,新的一年更上一层楼! 初级算法-哈希表...
进程间通信【Linux】 1. 进程间通信 1.1 什么是进程间通信 在 Linux 系统中,进程间通信...
【Docker】P3 Dock... Docker数据卷、宿主机与挂载数据卷的概念及作用挂载宿主机配置数据卷挂载操作示例一个容器挂载多个目...