119.【Uniapp】(十二)

简介: 119.【Uniapp】
(3).获取商品列表数据

1.在data中新增如下的数据节点

data() {
  return {
    // 商品列表的数据
    goodsList: [],
    // 总数量,用来实现分页
    total: 0
  }
}

2.在 onLoad 生命周期函数中,调用 getGoodsList 方法获取商品列表数据:

onLoad(options) {
  // 调用获取商品列表数据的方法
  this.getGoodsList()
}

3.在methods区域

methods: {
  // 获取商品列表数据的方法
  async getGoodsList() {
    // 发起请求
    const { data: res } = await uni.$http.get('/api/public/v1/goods/search', this.queryObj)
    if (res.meta.status !== 200) return uni.$showMsg()
    // 为数据赋值
    this.goodsList = res.message.goods
    this.total = res.message.total
  }
}


(4).渲染商品列表的数据结构

1.在页面中,通过 v-for 指令,循环渲染出商品的 UI 结构

<template>
  <view>
    <view class="goods_list">
      <block v-for="(item,index) in goodsList" :key="index">
        <view class="goods-item">
          <!-- 左侧的盒子  图标-->
          <view class="goods-item-left">
            <image :src="item.goods_small_logo || defaultPic " class="goods-pic" mode=""></image>
          </view>
          <!-- 右侧的盒子 名字-->
          <view class="goods-item-right">
            <!-- 名字 -->
            <view class="goods-name">
              {{item.goods_name}}
            </view>
            <!-- 价格 -->
            <view class="goods-info-box">
              <view class="goods-price">
                ¥{{item.goods_price}}
              </view>
            </view>
          </view>
        </view>
      </block>
    </view>
  </view>
</template>

2.为了防止某些商品的图片不存在,需要在 data 中定义一个默认的图片:

data() {
  return {
    // 默认的空图片
    defaultPic: 'https://img3.doubanio.com/f/movie/8dd0c794499fe925ae2ae89ee30cd225750457b4/pics/movie/celebrity-default-medium.png'
  }
}

并在页面渲染时按需使用:

<image :src="goods.goods_small_logo || defaultPic" class="goods-pic"></image>

4.美化商品列表的 UI 结构:

<template>
  <view>
    <view class="goods_list">
      <block v-for="(item,index) in goodsList" :key="index">
        <view class="goods-item">
          <!-- 左侧的盒子  图标-->
          <view class="goods-item-left">
            <image :src="item.goods_small_logo || defaultPic " class="goods-pic" mode=""></image>
          </view>
          <!-- 右侧的盒子 -->
          <view class="goods-item-right">
            <!-- 名字 -->
            <view class="goods-name">
              {{item.goods_name}}
            </view>
            <!-- 价格 -->
            <view class="goods-info-box">
              <view class="goods-price">
                ¥{{item.goods_price}}
              </view>
            </view>
          </view>
        </view>
      </block>
    </view>
  </view>
</template>
<style lang="scss">
  // 商品列表
  .goods-item {
    // 模块水平对其
    display: flex;
    // 上下间距
    padding: 10px 5px;
    // 底部画线
    border-bottom: 1px solid #f0f0f0;
    // 左侧盒子
    .goods-item-left {
      // 和图片的距离
      margin-left: 5px;
      // 图片大侠
      .goods-pic {
        width: 100px;
        height: 100px;
        display: block;
      }
    }
    // 右侧盒子
    .goods-item-right {
      // 垂直对其
      display: flex;
      flex-direction: column;
      // 两侧对其-上下
      justify-content: space-between;
      .goods-name {
        font-size: 13px;
      }
      .goods-price {
        color: #C00000;
        font-size: 16px;
      }
    }
  }
</style>
(5).把商品 item 项封装为自定义组件 (提升复用性)

1.创建组件

2.将 goods_list 页面中,关于商品 item 项相关的 UI 结构、样式、data 数据,封装到 my-goods 组件中:

goods_list.vue:父组件绑定数据传送给子组件数据

<template>
  <view>
    <view class="goods_list">
      <block v-for="(item,index) in goodsList" :key="index">
        <!-- 绑定自定义事件 并传递 item数据。 子类接受的名字是 item -->
        <my-goods :item="item"></my-goods>
      </block>
    </view>
  </view>
</template>

my-goods.vue: 子组件接受数据

<template>
  <view>
    <view class="goods-item">
      <!-- 左侧的盒子  图标-->
      <view class="goods-item-left">
        <image :src="item.goods_small_logo || defaultPic " class="goods-pic" mode=""></image>
      </view>
      <!-- 右侧的盒子 -->
      <view class="goods-item-right">
        <!-- 名字 -->
        <view class="goods-name">
          {{item.goods_name}}
        </view>
        <!-- 价格 -->
        <view class="goods-info-box">
          <view class="goods-price">
            ¥{{item.goods_price}}
          </view>
        </view>
      </view>
    </view>
  </view>
</template>
<script>
  export default {
    name: "my-goods",
    // 儿子接受父亲传递过来的数据
    props: {
      item: {
        type: Object,
        default: {}
      }
    },
    data() {
      return {
        // 默认的空图片
        defaultPic: 'https://img3.doubanio.com/f/movie/8dd0c794499fe925ae2ae89ee30cd225750457b4/pics/movie/celebrity-default-medium.png'
      };
    }
  }
</script>
<style lang="scss">
  // 商品列表
  .goods-item {
    // 模块水平对其
    display: flex;
    // 上下间距
    padding: 10px 5px;
    // 底部画线
    border-bottom: 1px solid #f0f0f0;
    // 左侧盒子
    .goods-item-left {
      // 和图片的距离
      margin-left: 5px;
      // 图片大侠
      .goods-pic {
        width: 100px;
        height: 100px;
        display: block;
      }
    }
    // 右侧盒子
    .goods-item-right {
      // 垂直对其
      display: flex;
      flex-direction: column;
      // 两侧对其-上下
      justify-content: space-between;
      .goods-name {
        font-size: 13px;
      }
      .goods-price {
        color: #C00000;
        font-size: 16px;
      }
    }
  }
</style>




相关文章
|
存储 JavaScript Java
|
小程序 iOS开发
|
开发者
|
6月前
|
存储 缓存 JavaScript
【Uniapp 专栏】深入剖析 Uniapp 的运行机制原理
【5月更文挑战第12天】Uniapp是一款基于Vue.js的跨平台前端框架,通过抽象不同平台的差异,实现一套代码多平台运行,提升开发效率。其架构包括视图层(基于Vue.js组件)、逻辑层(JavaScript处理业务逻辑)和数据层(管理应用数据)。运行时,Uniapp会根据目标平台转换代码并适配。关键技术包括Web标准、原生插件和运行时环境。优化措施包含代码分包、数据懒加载和缓存机制。借助HBuilderX等工具,开发者能高效地进行开发和测试。Uniapp的运行机制融合多种技术,为跨平台应用开发提供便利。
383 2
【Uniapp 专栏】深入剖析 Uniapp 的运行机制原理
|
存储 JavaScript
|
6月前
|
前端开发 JavaScript Android开发
【Uniapp 专栏】分析 Uniapp 与其他前端框架的异同
【5月更文挑战第16天】Uniapp是一个基于Vue.js的跨平台前端框架,能将代码编译成iOS、Android、H5等多个平台应用,简化跨平台开发。相比React和Angular,Uniapp更适合移动应用,减少平台适配工作。Vue.js的组件化和灵活性在Uniapp中得到延伸,增加了移动端特性。而Flutter性能优越,但学习成本高。开发者应根据项目需求和技术栈选择合适的框架。
177 4
【Uniapp 专栏】分析 Uniapp 与其他前端框架的异同
|
6月前
|
Android开发 UED 开发者
【Uniapp 专栏】比较 Uniapp 与原生开发的差异与适用场景
【5月更文挑战第15天】UniApp与原生开发各有千秋。UniApp以高效跨平台著称,一套代码覆盖多平台,降低开发成本,适合快速开发简单应用。原生开发则提供优秀性能和用户体验,适合对性能要求高的复杂应用。两者在功能实现和维护上各有优势,开发者需根据项目需求权衡选择。随着技术进步,两者都在不断优化,为移动应用开发带来新机遇。
334 1
【Uniapp 专栏】比较 Uniapp 与原生开发的差异与适用场景
|
6月前
|
JavaScript Java 测试技术
基于SpringBoot+Vue+uniapp的网页小游戏交流论坛的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue+uniapp的网页小游戏交流论坛的详细设计和实现(源码+lw+部署文档+讲解等)
|
存储 小程序 API