2 | uniapp项目实战-首页模块设计
1. 功能分析修改导航栏的外观使用分段器组件搭建子页面封装自己异步请求2. 使用分段器组件搭建子页面2.1 搭建子页面首页模块分为 4个部分,分别是 推荐、分类、最新、专辑新建自定义组件来代替 上述的4个页面home-recommendhome-categoryhome-newhome-album2.2 使用分段器https://ext.dcloud.net.cn/plugin?id=54<
·
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 。。。
想了解更多,参见视频
更多推荐
已为社区贡献3条内容
所有评论(0)