当前位置: 首页 > news >正文

uniapp-首页配置

为了获取到后台服务器发来的数据,需要配置相应的网络地址。位置在main.js入口文件中。

import { $http } from '@escook/request-miniprogram'uni.$http = $http
// 配置请求根路径
$http.baseUrl = 'https://api-hmugo-web.itheima.net'// 请求开始之前做一些事情
$http.beforeRequest = function (options) {uni.showLoading({title: '数据加载中...',})
}// 请求完成之后做一些事情
$http.afterRequest = function () {uni.hideLoading()
}

轮播图的实现

获取轮播图数据

1.首先需要在data中定义轮播图数组,以便将轮播图数据存在数组中。
2.在 onLoad 生命周期函数中调用获取轮播图数据的方法。
3.在 methods 中定义获取轮播图数据的方法,从后台获取轮播图。

export default {data() {return {// 1. 轮播图的数据列表,默认为空数组swiperList: [],}},onLoad() {// 2. 在小程序页面刚加载的时候,调用获取轮播图数据的方法this.getSwiperList()},methods: {// 3. 获取轮播图数据的方法async getSwiperList() {// 3.1 发起请求,将返回数据data赋值给为resconst { data: res } = await uni.$http.get('/api/public/v1/home/swiperdata')// 3.2 请求失败if (res.meta.status !== 200) {return uni.showToast({title: '数据请求失败!',duration: 1500,icon: 'none',})}// 3.3 请求成功,用res数据中的 message 为 data 中的数据赋值this.swiperList = res.message},},
}

res的内容如图所示:
在这里插入图片描述

渲染轮播图的 UI 结构

<template><view><!-- 轮播图区域 --><swiper :indicator-dots="true" :autoplay="true" :interval="3000" :duration="1000" :circular="true"><!-- 循环渲染轮播图数组的 item 项 --><swiper-item v-for="(item, i) in swiperList" :key="i"><view class="swiper-item"><!-- 动态绑定图片的 src 属性 --><image :src="item.image_src"></image></view></swiper-item></swiper></view>
</template>

模拟器模拟效果:
在这里插入图片描述

点击轮播图跳转到商品详情页面

<swiper-item v-for="(item, i) in swiperList" :key="i"><!-- 增加一个动态生成对应的商品详情跳转链接,当检测到轮播图被点击时进行跳转 --><navigator class="swiper-item" :url="'/subpkg/goods_detail/goods_detail?goods_id=' + item.goods_id"><!-- 动态绑定图片的 src 属性 --><image :src="item.image_src"></image></navigator>
</swiper-item>

封装 uni.$showMsg() 方法

当数据请求失败之后,经常需要调用 uni.showToast({ /* 配置对象 */ }) 方法来提示用户。此时,可以在main.js全局封装一个 uni.$showMsg() 方法,来简化 uni.showToast() 方法的调用。

// 封装的展示消息提示的方法
uni.$showMsg = function (title = '数据加载失败!', duration = 1500) {uni.showToast({title,duration,icon: 'none',})
}

分类导航区域的实现

获取分类导航的数据

1.首先需要在data中定义分类导航数组,以便将分类导航数据存在数组中。
2.在 onLoad 生命周期函数中调用获取数据的方法。
3.在 methods 中定义获取数据的方法,从后台获取数据。

export default {data() {return {// 1. 分类导航的数据列表navList: [],}},onLoad() {// 2. 在 onLoad 中调用获取数据的方法this.getNavList()},methods: {// 3. 在 methods 中定义获取数据的方法async getNavList() {const { data: res } = await uni.$http.get('/api/public/v1/home/catitems')if (res.meta.status !== 200) return uni.$showMsg()this.navList = res.message},},
}

res内容如图所示:
在这里插入图片描述

渲染 UI 结构

<!-- 分类导航区域 -->
<view class="nav-list"><view class="nav-item" v-for="(item, i) in navList" :key="i"><image :src="item.image_src" class="nav-img"></image></view>
</view>

模拟器效果:
在这里插入图片描述

点击分类切换到分类页面

<!-- 分类导航区域 -->
<view class="nav-list"><!-- 为 nav-item 类绑定点击事件处理函数,监听到点击事件时执行 --><view class="nav-item" v-for="(item, i) in navList" :key="i" @click="navClickHandler(item)"><image :src="item.image_src" class="nav-img"></image></view>
</view>
// nav-item 项被点击时候的事件处理函数
navClickHandler(item) {// 判断点击的是哪个 navif (item.name === '分类') {//切换页面uni.switchTab({url: '/pages/cate/cate'})}
}

楼层区域的实现

获取楼层数据

1.定义 data 数据
2.在 onLoad 中调用获取数据的方法
3.在 methods 中定义获取数据的方法

export default {data() {return {// 1. 楼层的数据列表floorList: [],}},onLoad() {// 2. 在 onLoad 中调用获取楼层数据的方法this.getFloorList()},methods: {// 3. 定义获取楼层列表数据的方法async getFloorList() {const { data: res } = await uni.$http.get('/api/public/v1/home/floordata')if (res.meta.status !== 200) return uni.$showMsg()this.floorList = res.message},},
}

res内容:
在这里插入图片描述

渲染楼层的标题

<!-- 楼层区域 -->
<view class="floor-list"><!-- 楼层 item 项 --><view class="floor-item" v-for="(item, i) in floorList" :key="i"><!-- 楼层标题 --><image :src="item.floor_title.image_src" class="floor-title"></image></view>
</view>

渲染楼层里的图片

<!-- 楼层图片区域 -->
<view class="floor-img-box"><!-- 左侧大图片的盒子 --><view class="left-img-box"><image :src="item.product_list[0].image_src" :style="{width: item.product_list[0].image_width + 'rpx'}" mode="widthFix"></image></view><!-- 右侧 4 个小图片的盒子 --><view class="right-img-box"><view class="right-img-item" v-for="(item2, i2) in item.product_list" :key="i2" v-if="i2 !== 0"><image :src="item2.image_src" mode="widthFix" :style="{width: item2.image_width + 'rpx'}"></image></view></view>
</view>

效果:
在这里插入图片描述

实现跳转

// 获取楼层列表数据
async getFloorList() {const { data: res } = await uni.$http.get('/api/public/v1/home/floordata')if (res.meta.status !== 200) return uni.$showMsg()// 通过双层 forEach 循环,处理res中的 URL 地址,将地址的查询部分分割出来重新连接到指向分包的 URLres.message.forEach(floor => {floor.product_list.forEach(prod => {prod.url = '/subpkg/goods_list/goods_list?' + prod.navigator_url.split('?')[1]})})this.floorList = res.message
}

把图片外层的 view 组件,改造为 navigator 组件,并动态绑定 url 属性 的值:

<!-- 楼层图片区域 -->
<view class="floor-img-box"><!-- 左侧大图片的盒子 --><navigator class="left-img-box" :url="item.product_list[0].url"><image :src="item.product_list[0].image_src" :style="{width: item.product_list[0].image_width + 'rpx'}" mode="widthFix"></image></navigator><!-- 右侧 4 个小图片的盒子 --><view class="right-img-box"><navigator class="right-img-item" v-for="(item2, i2) in item.product_list" :key="i2" v-if="i2 !== 0" :url="item2.url"><image :src="item2.image_src" mode="widthFix" :style="{width: item2.image_width + 'rpx'}"></image></navigator></view>
</view>
http://www.lryc.cn/news/26523.html

相关文章:

  • 支持DDR5,超频更简单,小雕够给力,技嘉B760M小雕WIFI主板上手
  • fengMap 自定义dom 偏离实际位置;缩放时飘出地图所在区域
  • TryHackMe-黑我杯
  • 【JAVA程序设计】【C00109】基于SSM(非maven)的员工工资管理系统
  • 《计算机原理》——HelloWorld.cpp如何运行的
  • 【面试题】在JS循环中使用await会怎么样?
  • Qt QMessageBox详解
  • Flutter之beamer路由入门指南
  • 「基础篇」机器学习概览
  • 揭秘可视化图探索工具 NebulaGraph Explore 是如何实现图计算的
  • 移动架构43_什么是Jetpack
  • TiDB的分布式事务原理探究
  • 【C语言】函数指针和指针函数
  • Nodejs中npx简介和作用
  • Matplotlib精品学习笔记001——绘制3D图形详解+实例讲解
  • 学习ifconfig实战技巧,成为网络管理高手
  • day38|70. 爬楼梯(进阶)、322. 零钱兑换、279.完全平方数
  • SpringBoot全局异常处理
  • SpringBoot异常处理
  • 《C++ Primer Plus》(第6版)第8章编程练习
  • RAD Studio 11.3 Alexandria Crack
  • Stm32 iic 协议使用
  • Malware Dev 02 - Windows SDDL 后门利用之 SCManager
  • 每日一题29——山峰数组的顶部
  • Linux- 系统随你玩之--好用到炸裂的系统级监控、诊断工具
  • 第十三节 继承
  • 【优化】性能优化Springboot 项目配置内置Tomcat使用Http11AprProtocol(AIO)
  • SpringBoot之@ConfigurationProperties、@EnableConfigurationProperties
  • 数组一次性删除多条数据
  • 相机删除照片如何恢复?一键解决它