微信小程序(八)_事件处理

界面与逻辑层交互,第一:从逻辑层往界面层暴露数据;第二:界面层需要有一些行为用逻辑层处理,就用到事件机制。

事件机制,在html中的事件机制是一样的,只是在小程序中有一些微小的变化。

小程序事件处理,通过标签的属性,指定事件处理的函数。

bindtap="xx"

eg:<button bindtap="tapHandle">click me</button>,然后在逻辑层就可以去处理 tapHandle 这个事件。

Page({
  // 页面逻辑层,可以定义data
  // on xxx 生命周期函数
  // 定义用于界面层的事件处理函数
  tapHandle(e){
    // e 是事件参数  事件参数、谁被点击都可以打印出
    console.log(e)
  }
 
})

解决冒泡:

类似有两个绑定事件,且是子父级关系的,都会有冒泡。

解决办法就是,给子元素的属性改为catchtap=""

<view viewbindtap="viewbindtap">
  <button catchtap="tapHandle">click me</button>
  <!-- 类似有两个绑定事件,且是子父级关系的,都会有冒泡 -->
  <!-- 解决办法就是,给子元素的属性改为catchtap="" -->
</view>

多条数据,如何获取到,点击的是哪一条?

可以通过data-xx 属性 给事件处理函数传递额外的参数。

<!-- 可以通过data-xx 属性  给事件处理函数传递额外的参数   -->
<!-- 有好多条数据,希望点击时,能够获取到点击的是哪一个? -->
<!-- 给按钮添加属性形式,data-id="1" -->
<view>
  <text>item</text>
  <button bindtap="removeHandle" data-id="1">remove</button>
</view>
<view>
  <text>item</text>
  <button bindtap="removeHandle" data-id="2">remove</button>
</view>
<view>
  <text>item</text>
  <button bindtap="removeHandle" data-id="3">remove</button>
</view>
<view>
  <text>item</text>
  <button bindtap="removeHandle" data-id="4">remove</button>
</view>
<view>
  <text>item</text>
  <button bindtap="removeHandle" data-id="5">remove</button>
</view>

逻辑层:

当点击条目时,会打印出当前的e。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

                                                                                              分界线

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

举个大栗子 

小程序事件处理

业务:点击左边的tab时,tab高亮。

wxml:

<view class="couSelectNav">
            <view>
                <text class="{{_num==1 ?'active':''}}" bindtap="couSelNavHandle" data-num="1">银行从业</text>
                <text class="{{_num==2 ?'active':''}}" bindtap="couSelNavHandle" data-num="2">会计职称</text>
                <text class="{{_num==3 ?'active':''}}" bindtap="couSelNavHandle" data-num="3">基金从业</text>
                <text class="{{_num==4 ?'active':''}}" bindtap="couSelNavHandle" data-num="4">证券从业</text>
                <text class="{{_num==5 ?'active':''}}" bindtap="couSelNavHandle" data-num="5">期货从业</text>
                <text class="{{_num==6 ?'active':''}}" bindtap="couSelNavHandle" data-num="6">经济师</text>
            </view>
        </view>

wxss:

.couSelect {
  width: 100%;
  height: 100%;
  margin-top: 10rpx;
  overflow: hidden;
}
.couSelectNav {
  float: left;
  width: 170rpx;
  height: 100%;
  background: #f2f4f7;
  padding-top: 32rpx;
  padding-bottom: 30rpx;
}
.couSelectNav text {
  display: block;
  width: 100%;
  height: 104rpx;
  line-height: 104rpx;
  text-align: center;
  font-size: 28rpx;
  border-left: 10rpx solid transparent;
}
.couSelectNav text.active {
  color: #000;
  border-color: #f85a40;
  background: #fff;
}

逻辑层:

Page({
  /**
   * 页面的初始数据
   */
  data: {
    _num:1,//一定要在这里定义_num
  },
   couSelNavHandle(e) {
    this.setData({
      _num: e.target.dataset.num,//点击时,改变_num的值
    })


})

猜你喜欢

转载自blog.csdn.net/weixin_42220533/article/details/83582520
今日推荐