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赋值给为res
      const { 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) {
  // 判断点击的是哪个 nav
  if (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 地址,将地址的查询部分分割出来重新连接到指向分包的 URL
  res.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>
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
uniapp-admin是一个基于uni-app框架开发的管理后台模板。它提供了一套完整的开发指南,包括主题定制、国际化、字体图标引入、接口管理、接口请求配置App升级方案等功能。此外,uniapp-admin还支持消息推送、在线文档预览、跨域等多种解决方案。最新版本是2.0.0,带来了更加完善的功能和美观的页面设计。\[3\]如果需要导入项目并绑定自己的空间,可以参考uni-admin基础框架的操作步骤,具体可以查看相关文章。\[1\]如果需要更改顶部左侧菜单栏样式结构,可以在根目录下的window文件夹进行操作。\[1\]如果需要更改logo,可以在admin.config.js文件夹下进行修改。\[1\]另外,uniapp-admin还提供了整包升级更新方案,可以通过检测app版本号和平台信息来进行更新提示,并支持下载更新或打开更新链接。\[2\] #### 引用[.reference_title] - *1* [uniCloud uniadmin你了解多少?](https://blog.csdn.net/qq_50946674/article/details/124867268)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [基于uni-app多平台管理系统模板uniapp-admin](https://blog.csdn.net/liupan6889/article/details/102762617)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值