微信小程序:动态控制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}}'

微信小程序中,可以使用动态class来实现样式的动态绑定。根据引用\[1\]中的代码,可以看到在wxml文件中,使用了wx:for循环来遍历一个数组,并使用wx:key来指定数组中的唯一标识。在遍历的过程中,可以根据条件判断来动态添加或移除某个class。例如,可以使用三元表达式来判断是否添加选中样式,如引用\[3\]中的代码所示。在data中定义一个变量,根据业务需求动态修改该变量的值,然后在wxml中使用该变量来判断是否添加选中样式。这样就可以实现微信小程序中的动态class效果。 #### 引用[.reference_title] - *1* [微信小程序动态控制class属性](https://blog.csdn.net/zxlzxcvbnm/article/details/121354181)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [小程序 动态绑定class](https://blog.csdn.net/weixin_40571331/article/details/109034710)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [微信小程序实现动态添加class的功能,其实这样做就可以了](https://blog.csdn.net/qq_44415875/article/details/129946809)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值