微信小程序系列(六):使用组件监听事件过滤数据

上一文章,讲解外部样式类,并初步引入wxs的概念

http://www.fcors.com/%e6%8a%80%e6%9c%af%e4%b8%8e%e6%a1%86%e6%9e%b6/%E5%BE%AE%E4%BF%A1%E5%B0%8F%E7%A8%8B%E5%BA%8F%E7%B3%BB%E5%88%97%EF%BC%88%E4%BA%94%EF%BC%89%EF%BC%9A%E9%80%9A%E8%BF%87%E9%9D%A2%E5%90%91%E5%AF%B9%E8%B1%A1%E6%94%B9%E9%80%A0%E8%87%AA%E5%AE%9A%E4%B9%89/

下面将进行组件的监听事件函数讲解,通过该函数,组件在接收数据后,进行数据的重新构造。

1、创建自定义组件“hot-list”

2、在home.json引入组件

{
  "usingComponents": {
      "s-category-grid":"/components/category-gird/index",
      "s-spu-scroll":"/components/spu-scroll/index",
      "s-hot-list":"/components/hot-list/index"
      
  }
}

3、在home.wxml增加组件代码

<!--pages/home/home.wxml-->
<span>{{WebTitle}}</span>
<view>
    <image class="top-theme" src="{{topTheme.entrance_img}}" ></image>
    <swiper class="swiper"
        indicator-dots="{{true}}"
        indicator-active-color="#157658"
        autoplay="{{true}}"
        circular="{{true}}"
    >
        <block wx:for="{{bannerB.items}}">
            <swiper-item>
                <image class="swiper" src="{{item.img}}"></image>>
            </swiper-item>
        </block>
    </swiper>

    <s-category-grid grid="{{grid}}"></s-category-grid>
    <image class="activityD" src="{{activityD.entrance_img}}"></image>

    <s-spu-scroll 
        m-scroll-class="spu-scroll"
        theme="{{themeE}}"
        spu-list="{{themeESpu}}"
        wx:if="{{topTheme.online}}">
    </s-spu-scroll>

    <image src="{{themeF.entrance_img}}" class="quality"></image>

    <s-hot-list banner="{{bannerG}}"></s-hot-list>
</view>
基础技术、小程序、技术与框架微信小程序系列(六):使用组件监听事件过滤数据插图

3、在home.js中绑定“bannerG”

基础技术、小程序、技术与框架微信小程序系列(六):使用组件监听事件过滤数据插图1

4、在组件“hot-list”中的index.js设置监听事件

// components/hot-list/index.js
Component({
    /**
     * 组件的属性列表
     */
    properties: {
        banner:Object
    },
    observers:{
        /** 'banner,theme':function(banner,theme) */
        'banner':function(banner){
            if(!banner){
                return;
            }
            if(banner.items.length===0){
                return;
            }
            const leftItem = banner.items.find(b=>b.name==='left');
            const rightTopItem = banner.items.find(b=>b.name==='right-top');
            const rightBottomItem = banner.items.find(b=>b.name==='right-bottom');
            this.setData({
                leftItem,
                rightTopItem,
                rightBottomItem
            })
        }

    },
    /**
     * 组件的初始数据
     */
    data: {

    },

    /**
     * 组件的方法列表
     */
    methods: {

    }
})
基础技术、小程序、技术与框架微信小程序系列(六):使用组件监听事件过滤数据插图2

通过observers函数,把数组直接转换成对应的三个对象,最后在组件的index.wxml文件中直接赋值即可,简单方便。

5、在组件“hot-list”中的index.wxml填写骨架

<view class="container">
    <image class="tittle" src="{{banner.img}}"></image>
    <view class="inner-container">
        <image class="left" src="{{leftItem.img}}"></image>
        <view class="right-container">
            <image class="right-size" src="{{rightTopItem.img}}"></image>
            <image class="right-size" src="{{rightBottomItem.img}}"></image> 
        </view>
    </view>
</view>
基础技术、小程序、技术与框架微信小程序系列(六):使用组件监听事件过滤数据插图3

6、在组件“hot-list”中添加wxss

/* components/hot-list/index.wxss */

.container{

display:flex;
flex-direction: column;
align-items: center;
padding-top:40rpx;
background-color: #ffffff;
}

.tittle{
    width:690rpx;
    height:90rpx;
}
.inner-container{
    display: flex;
    flex-direction: row;
    width: 100%;
    justify-content: space-between;
}
.right-container{
    display: flex;
    flex-direction: column;
   
    justify-content: space-between;
}

.left{
    display:flex;
    widows: 346rpx;
    height: 522rpx;

}
.right-size{
    width: 400rpx;
    height:260rpx;
    display: flex;
}

组件监听事件完成。下面将进行讲解小程序的抽象节点。通过抽象节点和lin-ui打造瀑布流

http://www.fcors.com/%e6%8a%80%e6%9c%af%e4%b8%8e%e6%a1%86%e6%9e%b6/%e5%be%ae%e4%bf%a1%e5%b0%8f%e7%a8%8b%e5%ba%8f%e7%b3%bb%e5%88%97%ef%bc%88%e4%b8%83%ef%bc%89%ef%bc%9a%e5%88%a9%e7%94%a8lin-ui%e5%92%8c%e6%8a%bd%e8%b1%a1%e8%8a%82%e7%82%b9%e7%bc%96%e5%86%99%e7%80%91/