微信小程序:动态控制class属性

一、需求:

  点击一个选项,让其出现不同于其他选项的样式,比如选项文字的颜色变红。
二、初步解决方案:

  可以设置一个活跃选项的数据来记录选中选项的下标(默认为0),其次选中其他选项时可以通过点击事件获取到所选选项的下标,并赋值给活跃选项。要点击的选项是 wx:for 循环出来的,所以接下来就是通过一个三元运算来判断每个循环的元素是否被选中,选中则加特殊样式。

js:

cateActive: '0',    // 活跃选项下标



clickCate(e) {

    console.log(e)

    this.setData({

      cateActive: e.currentTarget.dataset.index

    })

},

wxml:

<view class='task_cate'>

  <view wx:for='{{cateArr}}' class='cate_item' wx:key='cate' bindtap='clickCate'>

    <view class='cate_icon'><image src='../../images/{{item.icon}}.png'></image></view>

    <view class='cate_text {{index == cateActive ? "cate_text_active" : ""}}'>{{item.text}}</view>

  </view>

</view>

  果不其然,出现问题了。不管怎么点击,只有第一个选项是红色的。

  经过排查,看到控制台的信息如下:

  可以看出,currentTarget.dataset中并没有我们所需要的值。通过查阅资料,使用 data-index 可以将选项的下标值通过事件对象(event)反馈给函数,也就是 e 。

三、最终解决方案:

  在初步解决方案的基础上,在标签中定义 data-index='{{index}}',使得选项下标值可以通过事件对象(event)被点击函数获取到。

  通过这个小小的改动即可成功解决。

四、总结:

  原以为,点击的选项是 wx:for 循环出来的,可以直接通过 {{index}} 来做三元运算,但是事件对象(event)并不会通过这样的方式返回给函数,必须依靠 data-index='{{index}}'

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值