产品列表页开发
在产品列表页面总共需要开发 4 项功能,分别是产品列表渲染、产品价格排序、产品价格范围筛选以及产品分页,通过产品列表可以深入理解参数传递、element-ui 等知识点的应用。
布局产品列表静态页面
产品列表静态页面代码如下(视频中含详细布局讲解)。
CSS 代码可以在配套资源中下载。 |
<template>
<view>
<view class="sort_menu">
<view class="sort_menu_li">
综合排序
</view>
<view class="sort_menu_li">
价格由低到高
</view>
<view class="sort_menu_li">
价格由高到低
</view>
</view>
<view class="price">
<view class="price_li">
<input type="text" value="" />
</view>
<view class="price_li">
-
</view>
<view class="price_li">
<input type="text" value="" />
</view>
<view class="price_li">
<text>单击</text>
</view>
</view>
<view class="index_hot">
<view class="index_product_main">
<view class="index_product_li">
<image src="/static/p2.jpg" mode="widthFix"></image>
<text>产品名称</text>
<text>产品价格</text>
</view>
<view class="index_product_li">
<image src="/static/p2.jpg" mode="widthFix"></image>
<text>产品名称</text>
<text>产品价格</text>
</view>
<view class="index_product_li">
<image src="/static/p2.jpg" mode="widthFix"></image>
<text>产品名称</text>
<text>产品价格</text>
</view>
<view class="index_product_li">
<image src="/static/p2.jpg" mode="widthFix"></image>
<text>产品名称</text>
<text>产品价格</text>
</view>
<view class="index_product_li">
<image src="/static/p2.jpg" mode="widthFix"></image>
<text>产品名称</text>
<text>产品价格</text>
</view>
</view>
</view>
<view class="footer">
</view>
</view>
</template>
渲染产品列表数据
本节完成产品列表数据的获取,通过整个产品列表页面,大家可以掌握参数传递、链式跳转等知识点。
请求方式:get请求。
需求分析如下。 (1)在data属性中定义productList空数组,接收获取到的产品数据。 (2)在methods属性中定义发送数据请求的方法。 (3)在onLoad生命周期函数调用数据请求的方法。
export default {
data() {
return {
productList: []
}
},
methods: {
getData() {
uni.request({
url: `http://api.mm2018.com:8095/api/goods/allGoods?page=1&size=8&sort=''&priceGt=''&priceLte=''`,
method: 'GET',
success: res => {
console.log(res.data.data)
this.productList = res.data.data
}
})
}
},
onLoad() {
this.getData()
}
}
将获取到的 productList 数组渲染到视图层,代码如下。
<view class="index_hot">
<view class="index_product_main">
<view class="index_product_li" v-for="(item,i) in productList" :key="i">
<image :src="item.productImageUrl" mode="widthFix"></image>
<text>{{item.productName}}</text>
<text>{{item.salePrice}}</text>
</view>
</view>
</view>
价格排序功能
在接口中有 sort 参数,当 sort 为空时,表示价格综合排序,当 sort 为 1 时,表示价格由低到高,当 sort 为 −1 时,表示价格由高到低,代码如下。
视图层代码如下。
<template>
<view class="sort_menu">
<view class="sort_menu_li" @click="sortData(0)">
综合排序
</view>
<view class="sort_menu_li" @click="sortData(1)">
价格由低到高
</view>
<view class="sort_menu_li" @click="sortData(2)">
价格由高到低
</view>
</view>
</template>
JS 逻辑代码如下。
<script>
export default {
data() {
return {
productList: [],
//1.定义sort属性,0为综合排序,1为正序,-1为倒序
sort: null
}
},
methods: {
getData() {
uni.request({
//2.在模板字符串中使用sort属性
url: `http://api.mm2018.com:8095/api/goods/allGoods?page=1&size=8&sort=${this.sort}&priceGt=''&priceLte=''`,
method: 'GET',
success: res => {
console.log(res.data.data)
this.productList = res.data.data
}
})
},
//4.定义单击方法并接收参数
sortData(i) {
if (i == 0) {
//综合排序
this.sort = null
this.getData()
}
if (i == 1) {
this.sort = 1 //价格由低到高
this.getData()
}
if (i == 2) {
this.sort = -1 //价格由高到低
this.getData()
}
}
},
onLoad() {
this.getData()
}
}
</script>
代码解析如下。
修改 sort 值后,需要再次调用 getData 方法,获取最新数据。
价格范围筛选功能
在接口中,priceGt 参数表示最小值,priceLte 参数表示最大值,使用双向数据绑定获取用户输入的价格,代码如下。
视图层代码如下。
<template>
<view class="price">
<view class="price_li">
<input type="text" v-model="priceGt" />
</view>
<view class="price_li">
-
</view>
<view class="price_li">
<input type="text" v-model="priceLte" />
</view>
<view class="price_li">
<text @click="priceData()">单击</text>
</view>
</view>
</template>
JS 代码如下。
<script>
export default {
data() {
return {
productList: [],
sort: null,
priceGt: null,
priceLte: null
}
},
methods: {
getData() {
uni.request({
url: `http://api.mm2018.com:8095/api/goods/allGoods?page=1&size=8&sort=${this.sort}&priceGt=${this.priceGt}&priceLte=${this.priceLte}`,
method: 'GET',
success: res => {
console.log(res.data.data)
this.productList = res.data.data
}
})
},
sortData(i) {
//综合排序
if (i == 0) {
this.sort = null
this.getData()
}
if (i == 1) {
//价格由低到高
this.sort = 1
this.getData()
}
if (i == 2) {
//价格由高到低
this.sort = -1
this.getData()
}
},
//2.单击按钮重新获取数据即可
priceData() {
if (this.priceLte > this.priceGt) {
this.getData()
}
}
},
onLoad() {
this.getData()
}
}
</script>