【前端小程序】02 - 优购首页

1. 搜索框组件

1.1 创建文件夹及组件

创建搜索框组件

1.2 在首页中使用组件

  1. 在首页 indexindex.json文件的usingComponents属性中添加需要使用的组件名称和组件路径。
 "usingComponents": {
        "SearchInput": "../../components/SearchInput/SearchInput"
    }
  1. index.wxml中使用
<view>
  <SearchInput></SearchInput>  
</view>

1.3 定义搜索组件

  1. 定义组件 :
<view class="search_input">
    <navigator url="/pages/search/index" open-type="navigate">
        搜索
    </navigator>
</view>
  1. 使用less的方式定义组件样式 :
.search_input {
    height: 90rpx;
    background-color: var(--themeColor);
    padding: 10rpx;
    navigator {
        height: 100%;
        display: flex;
        justify-content: center;
        align-items: center;
        background-color: #fff;
        border-radius: 15rpx;
        color: #ccc;
    }
}

2. 首页轮播图

2.1 获取轮播图的接口数据

  1. 接口文档:轮播图接口地址。

  2. index.jsdata区域定义一个变量用于接收获取到的轮播图数据:

  data: {
        // 轮播图列表
        swiperDataList: []
    },
  1. 微信小程序发送一个请求 : 参考文档。

  2. onLoad生命周期函数中发送请求 :

  /**
     *  页面开始加载的时候触发
     * @param {*} options 
     */
onLoad: function(options) {
        var reqTask = wx.request({
            url: 'https://api-hmugo-web.itheima.net/api/public/v1/home/swiperdata',
            data: {},
            header: { 'content-type': 'application/json' },
            method: 'GET',
            dataType: 'json',
            responseType: 'text',
            success: (result) => {
                this.setData({
                    swiperDataList: result.data.message
                })
            },
            fail: () => {},
            complete: () => {}
        });
    }
  1. 出现以下问题:有两种解决方案,如果项目后期需要上线请选择第二种方式
域名为添加到自己的白名单中
解决以上问题的方式
配置完成域名之后需要在小程序项目配置界面进行刷新
  1. 此时再小程序调试器中的AppData中就可以查看接收变量中已经接收到值了:
调试器中的AppData中查看

2.2 动态渲染轮播图数据

  1. 动态渲染首页轮播图wxml
<view class="index_swiper">
   <swiper>
   <swiper-item
    wx:for="{{swiperDataList}}"
    wx:key="goods_id">
     <navigator>
        <image  src="{{item.image_src}}" mode="widthFix" />
     </navigator>
   </swiper-item>
 </swiper>
</view>
  1. 样式文件less
.index_swiper {
    swiper {
        width: 750rpx;
        height: 340rpx;
        image {
            /*  设置宽度为 100% 高度自适应  */
            width: 100%;
        }
    }
}
  1. swiper 标签存在默认的宽度和高度 100% *150px
  2. image 标签也存在默认的高度和宽度 320px *240px
  3. 设计图片和轮播图
    3.1 首先看一下轮播图的宽高 750 * 340
    3.2 让图片的高度自适应宽度等于 100%
    3.3 让swiper标签高度变成和图片一样高即可
  4. 图片标签属性
    4.1 mode 渲染模式 widthFix让图片标签的宽高 和 图片的内容等比例缩放
  1. 微信小程序中rpx单位计算:参考

2.3 将原生的请求修改为 promise 方式

  1. request 文件夹下创建一个 index.js文件,编写如下内容:
/**
 *  export 导出
 * @param {*} params 
 */
export const request = (params) => {
    return new Promise((resolve, reject) => {
        var reqTask = wx.request({
            // 解构出参数
            ...params,
            success: (result) => {
                resolve(result);
            },
            fail: (err) => {
                reject(err);
            }
        });

    })
}
  1. index首页的index.js文件中导入,请求的对象,并使用:
// 0. 引入用来发送请求的方法
import { request } from "../../request/index.js";

 //options(Object)
    /**
     *  页面开始加载的时候触发
     * @param {*} options 
     */
    onLoad: function(options) {
        // 1. 发送异步请求获取获取轮播图数据,优化的手段可以通过ES6的promise来解决
   
        /**
         *  使用promise 方式优化
         */
        request({ url: "https://api-hmugo-web.itheima.net/api/public/v1/home/swiperdata" }).then(result => {
            this.setData({
                swiperDataList: result.data.message
            });
        });
    }

3. 分类导航

3.1 获取首页分类导航的数据

 getCatesListData() {
        request({ url: "https://api-hmugo-web.itheima.net/api/public/v1/home/catitems" }).then(
            result => {
                this.setData({
                    catesList: result.data.message
                });
            }
        )
    },

3.2 编写页面结构

<!-- 分类导航开始  -->
<view class="index_cate">
  <navigator 
    hover-class="none"
    wx:for="{{catesList}}"
    wx:key="{{item.name}}">
    <!--  widthFix 宽高等比例缩放  -->
    <image src="{{item.image_src}}" mode="widthFix"/>
  </navigator>
</view>
<!-- 分类导航结束  -->

3.3 编写页面样式

/*  分类导航 开始  */
.index_cate {
    display: flex;
    navigator {
        float: 1;
        width: 200rpx;
        height: 200rpx;
        padding: 30rpx;
        image {
            width: 100%;
        }
    }
}
/*  分类导航 结束  */

4. 楼层模块

4.1 获取商品楼层数据

getFloorListData() {
        request({ url: "https://api-hmugo-web.itheima.net/api/public/v1/home/floordata" }).then(
            result => {
                this.setData({
                    floorList: result.data.message
                })
            }
        )
    },

4.2 编写楼层结构渲染数据

<!-- 商品楼层 开始 -->
<view class="index_floor">
  <view class="floor_group"
    wx:for="{{floorList}}"
    wx:key="floor_title"
    wx:for-item="item1"
    wx:for-index="index1">
    <view class="floor_title">
        <image src="{{item1.floor_title.image_src}}" mode="widthFix"/>
    </view>
    <view class="floor_list">
      <navigator
      wx:for="{{item1.product_list}}"
      wx:key="name"
      wx:for-item="item2"
      wx:for-index="index2">
        <image mode="{{index2===0?'widthFix':'scaleToFill'}}" src="{{item2.image_src}}"/>
      </navigator>
    </view>
  </view>
</view>
<!-- 商品楼层 结束 -->

4.3 编写页面样式

/*  商品楼层 开始   */
.index_floor {
    .floor_group {
        .floor_title {
            padding: 10rpx 0;
            image {
                // 继承父元素的宽度
                width: 100%;
                height: 100%;
            }
        }
        .floor_list {
            overflow: hidden;
            navigator {
                float: left;
                width: 33.333%;
                // 让后四张图片的高等于第一张图片的高度
                &:nth-last-child(-n + 4) {
                    // -n +4 代表后四个 
                    /* 原图的宽高就是 232 * 386  */
                    // 232 / 386 = 33.33vm / height
                    // 33.33vm * 386 / 232 这是第一张图片的高度
                    height: (33.33vw*386/232)/2;
                    border-left: 10rpx solid #fff;
                }

                &:nth-child(2),
                &:nth-child(3) {
                    border-bottom: 10rpx solid #fff;
                }

                image {
                    // 继承父元素的宽度
                    width: 100%;
                    height: 100%;
                }
            }
        }
    }
}
/*  商品楼层 结束  */
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,012评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,628评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,653评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,485评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,574评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,590评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,596评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,340评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,794评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,102评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,276评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,940评论 5 339
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,583评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,201评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,441评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,173评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,136评论 2 352

推荐阅读更多精彩内容