119.【Uniapp】(十三)

简介: 119.【Uniapp】
(6).使用过滤器处理价格

1.在 my-goods 组件中,和 data 节点平级,声明 filters 过滤器节点如下:

filters:{
      // 把数字处理为带两个小数点的数字
      tofixed(num){
        // 保留两个橡树
        return Number(num).toFixed(2)
      }
    }

2.在渲染商品价格的时候,通过管道符 | 调用过滤器:

<!-- 商品价格 -->
<view class="goods-price">¥{{item.goods_price | tofixed}}</view>

(7).下拉加载更多
  1. 下拉加载更多

[...arr1,...arr2] 就是数组之间进行拼接的操作

const arr = [...[1, 2, 3, 4], ...[1, 2, 3, 4]]
   console.log(arr, 'xxxxxxxxxxxxxxxxx')

1.打开项目根目录中的 pages.json 配置文件,为 subPackages 分包中的 goods_list 页面配置上拉触底的距离:

{
      "path": "goods_list/goods_list",
      "style": {
        "navigationBarTitleText": "",
        "enablePullDownRefresh": false,
        "onReachBottomDistance": 150
      }

2.在 goods_list 页面中,和 methods 节点平级,声明 onReachBottom 事件处理函数,用来监听页面的上拉触底行为:

onReachBottom() {
      // 让页码进行自增的操作
      this.queryObj.pagenum++
      // 进行触发函数方法
      this.getGoodsList()
    },

3.改造 methods 中的 getGoodsList 函数,当列表数据请求成功之后,进行新旧数据的拼接处理:

async getGoodsList() {
        const {
          data: resp
        } = await uni.$http.get('/api/public/v1/goods/search', this.queryObj)
        if (resp.meta.status === 200) {
          // 赋值商品数据-》 旧数据和新数据进行拼接,旧数据初始化为null,然后新数据默认先访问第一页的数据,进行了拼接的操作
          this.goodsList = [...this.goodsList, ...resp.message.goods]
          // 赋值总条数
          this.total = resp.message.total
        } else {
          uni.$showMsg()
        }
        console.log('商品链表的数据->', resp)
      }
    }
  }
  1. 通过节流阀防止发起额外的请求

goods_list.vue

// ⭐设置mask节流
        uni.showLoading({
          title: '正在努力加载数据中...',
          mask: true  // 节流的操作
        })
        // 手动关闭加载的操作
        uni.hideLoading()

  1. 判断数据是否加载完毕 (这个拦截放在上拉函数中)
pageSize*page>=total

goods_list.vue

onReachBottom() {
          // 放在页面自增的前面
      if (this.queryObj.pagesize * this.queryObj.pagenum >= this.total) {
        return uni.$showMsg('亲,到底了')
      }
      // 让页码进行自增的操作
      this.queryObj.pagenum++
      // 进行触发函数方法
      this.getGoodsList()
    },

  1. 开启下拉刷新 (需要关闭下拉)

page.json

{
      "path": "goods_list/goods_list",
      "style": {
        "navigationBarTitleText": "",
        "enablePullDownRefresh": true,
        "onReachBottomDistance": 150,
        "backgroundColor": "#f8f8f8"
      }

goods_list.vue

// 用户下拉的事件
    onPullDownRefresh() {
      this.queryObj.total = 0
      this.queryObj.pagenum = 1
      this.queryObj.goodsList = []
      // 重新调用请求的方法,并携带上关闭的回调函数
      this.getGoodsList(() => uni.stopPullDownRefresh())
    },
methods: {
      // 通过点击的参数获取数据
      async getGoodsList(cb) {
        // ⭐设置mask节流
        uni.showLoading({
          title: '正在努力加载数据中...',
          mask: true
        })
        const {
          data: resp
        } = await uni.$http.get('/api/public/v1/goods/search', this.queryObj)
        // 只要数据请求完毕,就立即按需调用 cb 回调函数
        cb && cb()
        if (resp.meta.status === 200) {
          // 赋值商品数据-》 旧数据和新数据进行拼接,旧数据初始化为null,然后新数据默认先访问第一页的数据,进行了拼接的操作
          this.goodsList = [...this.goodsList, ...resp.message.goods]
          // 赋值总条数
          this.total = resp.message.total
        } else {
          uni.$showMsg()
        }
        console.log('商品链表的数据->', resp)
        // 手动关闭加载的操作
        uni.hideLoading()
      }
    }
  }

(8).商品点击item项目进入商品详情页

1.将循环时的 block 组件修改为 view 组件,并绑定 click 点击事件处理函数:

goods_list.vue

<view class="goods_list">
      <view v-for="(item,index) in goodsList" :key="index">
        <!-- 绑定自定义事件 并传递 item数据。 子类接受的名字是 item -->
        <my-goods :item="item"></my-goods>
      </view>
    </view>
// 进入详情页
      gotoDetail(item) {
        uni.navigateTo({
          url: '/subpkg/goods_detail/goods_detail?goods_id=' + item.goods_id
        })
      }

(9).分支的合并与提交
git add .
git commit -m "完成了商品列表"
git push -u origin gooddslist
git checkout master
git add .
git commit -m "完成了商品列表"
git merge gooddslist
git push
git branch -d goodslist


相关文章
|
4天前
|
人工智能 小程序 JavaScript
Vue智慧校园云平台教育小程序源码
智慧校园是一种新型的教育模式,它贯穿整个教育过程,通过信息化技术,将学生、教师、教育资源、管理、服务等多个方面进行全面协调和优化,实现教育信息化、数字化、智能化,为学生创造更好的学习环境和教师更便捷的工作条件。
40 0
|
4天前
|
数据安全/隐私保护 UED 开发者
【Uniapp 专栏】Uniapp 项目中路由管理的实战经验分享
【5月更文挑战第12天】在 Uniapp 项目中,路由管理至关重要,涉及清晰的规划、配置和权限控制。合理设计路由结构便于开发维护,设置可读性高的页面路径和参数。根据场景选择参数传递和导航方式,处理嵌套路由,确保数据准确无误。添加权限判断保护受限页面,利用过渡动画提升用户体验。在复杂项目中,采用模块化管理路由,结合状态管理工具优化路由状态。持续测试和优化,以实现高效、流畅的用户导航。这些实战经验有助于提升 Uniapp 应用的质量。
|
4天前
|
传感器 搜索推荐 安全
【Uniapp 专栏】从案例看 Uniapp 在物联网应用中的运用
【5月更文挑战第12天】Uniapp在物联网中展现出强大生命力,应用于智能家居系统,允许用户通过移动应用控制灯光、窗帘、家电等。通过网络通信与服务器连接,实现设备状态实时同步和用户指令准确传递。提供个性化场景设置,保证流畅体验并注重安全,支持数据加密和用户认证。结合传感器技术,实现环境监测。随着物联网发展,Uniapp有望在更多领域发挥关键作用,塑造更智能的未来。
|
4天前
|
开发框架 缓存 API
【Uniapp 专栏】通过 Uniapp 构建移动办公应用案例分享
【5月更文挑战第12天】使用Uniapp开发的移动办公应用案例展示了其在提升工作效率和协作上的强大能力。应用涵盖日程管理、任务分配、文件共享、即时通讯等功能,适应跨平台需求,节省开发成本。借助Uniapp的组件和API,打造用户友好的界面,同时确保数据安全和稳定性。优化的界面设计及移动设备适应性,即使在网络不稳定时也能保证基本功能使用。此案例证明Uniapp是构建高效移动办公应用的理想选择,为企业数字化转型赋能。
|
4天前
|
小程序 JavaScript Java
基于SpringBoot+Vue+uniapp微信小程序的科创微应用平台的详细设计和实现
基于SpringBoot+Vue+uniapp微信小程序的科创微应用平台的详细设计和实现
29 0
|
8月前
|
存储 小程序 API
|
4天前
|
小程序 前端开发 JavaScript
ssm+vue+微信小程序的医疗科普小程序
ssm+vue+微信小程序的医疗科普小程序
|
4天前
|
存储 传感器 监控
UniApp+Vue智慧工地信息化管理云平台源码
智慧工地可以通过数字化手段,将工地的各个方面进行数字化存储和管理,从而实现的实时监测和共享。这可以大大提高工程的效率,减少工程中的人工干预,并且可以为后续的工程维护和升级提供便利。
33 2
|
6月前
|
Web App开发 小程序 机器人
uniapp案例30余种实战项目
uniapp案例30余种实战项目
|
8月前
|
存储 小程序 API
117.【微信小程序 - 01】(十三)
117.【微信小程序 - 01】
29 0