微信小程序怎么动态设置class值

        <view class="anthology_title">
          <text>选集</text>
          <text>{{vurl.length}}</text>
        </view>
        <view class="anthology_item">
          <view wx:for="vurl" bindtap="xj"><!--主要问题在这里,这个wxfor这里-->
            <text wx:if="{{index == 0}}" class="choice">{{index + 1}}</text>
            <text wx:else class="no">{{index + 1}}</text>
          </view>
        </view>

问题在vx:for那一部分。默认进去第一个text的class是choice,这个我已经配置好了,我想的是,当我点了这个wx:for里面的其他容器的时候(获得焦点),更改no为choice,然后其他失去焦点的容器又变回去no

用一个变量记录选中的下标,然后wx:for的时候和遍历到的数组下标index比较下就行,不需要if判断,直接设置class属性,示例如下
代码片段:https://developers.weixin.qq.com/s/7F8lEZmc7rwj

img

js

Page({
data:{
selected:0,//要更改选择默认的项或者保存后读取数据库更改这个数据项就行
vurl:['url1','url2','url3']
},
xj(e){
  this.setData({selected:e.currentTarget.dataset.index})
}
})

wxml

<view class="anthology_title">
          <text>选集</text>
          <text>{{vurl.length}}</text>
        </view>
        <view class="anthology_item">
          <view wx:for="{{vurl}}" bindtap="xj" data-index="{{index}}">
            <text class="{{index==selected?'choice':'no'}}">{{index + 1}}--{{item}}</text>
          </view>
        </view>


wxss

.choice{color:#f00}
.no{color:black}

其实你可以这么做:
你可以在遍历的每个对象中维护自己的一个状态,用来标识当前的样式,比如默认第一个对象的样式是“选择”,其他的是“不选择”,然后在点击其他对象的时候将当前点击的对象的样式标识为“选择”,其他标识为“不选择”,这样每个对象根据自己的样式进行渲染,即点击谁,谁“选择”。

  1. 定义不同的class样式
  2. 定义一个变量,用于当触发条件满足该条件时切换到该样式

以上只为思路

你需要在 vurl 加一个 状态 维护 自己的选中状态 。
比如 sttus:"no" 默认不选中。

然后 wx:for 里 判断 就用 item.status

   <text wx:if="{{item.status=="choose"}}" class="choice">{{index + 1}}</text>
    <text wx:else class="no">{{index + 1}}</text>



或者下面这种

img

也可以把变量定义到item对象里,每次只需要再js里改就行

三元运算,第一个参数就是状态,后面是你要加的类名

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632