1. 功能分析

  • 修改导航栏的外观
  • 使用分段器组件搭建子页面
  • 封装自己异步请求

2. 使用分段器组件搭建子页面

2.1 搭建子页面
  • 首页模块分为 4个部分,分别是 推荐、分类、最新、专辑
  • 新建自定义组件来代替 上述的4个页面
    home-recommend
    home-category
    home-new
    home-album
2.2 使用分段器

https://ext.dcloud.net.cn/plugin?id=54

<template>
	<view>
		<uni-segmented-control :current="current" :values="items.map(v=>v.title)" @clickItem="onClickItem" style-type="text" active-color="#e84393"></uni-segmented-control>
		<view class="content">
			<view v-if="current === 0">
				<home-recommend></home-recommend>
			</view>
			<view v-if="current === 1">
				<home-category></home-category>
			</view>
			<view v-if="current === 2">
				<home-new></home-new>
			</view>
			<view v-if="current === 3">
				<home-album></home-album>
			</view>
		</view>
	</view>
</template>

<script>
	import homeAlbum from "./home-album";
	import homeCategory from "./home-category";
	import homeNew from "./home-new";
	import homeRecommend from "./home-recommend";
	import uniSegmentedControl from "@/components/uni-segmented-control/uni-segmented-control.vue"
	export default {
		components: {
			homeAlbum,
			homeCategory,
			homeNew,
			homeRecommend,
			uniSegmentedControl
		},
		data() {
			return {
				items: [{
						title: "推荐"
					},
					{
						title: "分类"
					},
					{
						title: "最新"
					},
					{
						title: "专辑"
					}
				],
				current: 0
			}
		},
		methods: {
			onClickItem(e) {
				if (this.current !== e.currentIndex) {
					this.current = e.currentIndex;
				}
			}
		}
	}
</script>

<style>

</style>

在这里插入图片描述

2.3 分段器样式化
<template>
	<view>
		<view class="home_tab">
			<view class="home_tab_title">
				<view class="title_inner">
					<uni-segmented-control :current="current" :values="items.map(v=>v.title)" @clickItem="onClickItem" style-type="text"
					 active-color="#e84393"></uni-segmented-control>
				</view>
				<view class="iconfont iconsearch"></view>
			</view>
			<view class="content">
				<view v-if="current === 0">
					<home-recommend></home-recommend>
				</view>
				<view v-if="current === 1">
					<home-category></home-category>
				</view>
				<view v-if="current === 2">
					<home-new></home-new>
				</view>
				<view v-if="current === 3">
					<home-album></home-album>
				</view>
			</view>
		</view>
	</view>
</template>

<script>
。。。
</script>

<style lang="scss">
	.home_tab {
		.home_tab_title {
			position: relative;

			.title_inner {
				width: 60%;
				margin: 0 auto;
			}

			.iconsearch {
				position: absolute;
				top: 50%;
				transform: translateY(-50%);
				right: 5%;
			}
		}

		.content {}
	}
</style>

在这里插入图片描述

3. 封装自己的异步请求

3.1 为什么要封装?
  • 原生的请求不支持 promise
  • uni-api 的请求不能够方便的添加 请求中 效果
  • uni-api 的请求返回值是个数组,不方便

注意:uni-api 的请求是支持 promise

3.2 封装思路
  • 基于原生的promise来封装
  • 挂载到Vue的原型上
  • 通过 this.request 的方式来使用
3.3 代码

(1)新建一个util文件夹,命名 request.js

// es6  promise 微信小程序的api的铺垫 
export default (params)=>{

  // 加载中
  uni.showLoading({
    title:"加载中"
  })

  return new Promise((resolve,reject)=>{

    wx.request({
      ...params,
      success(res){
        resolve(res.data);
      },
      fail(err){
        reject(err);
      },
      complete(){
        uni.hideLoading();
      }
    })

  })
}

(2)在main.js入口文件中引入这个自定义的异步请求文件,并挂载到原型上

import Vue from 'vue'
import App from './App'
import request from "./utils/request";
Vue.config.productionTip = false
Vue.prototype.request=request;
App.mpType = 'app'

const app = new Vue({
  ...App
})
app.$mount()

(3)使用示例
在这里插入图片描述
后期更新,也许不会更,over 。。。
想了解更多,参见视频

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐