【修复日常bug】uni-app框架的switch组件的checked属性值动态绑定不生效

 

如上图所示,switch的开关是使用checked属性绑定的,并无双向绑定,下面来看代码。

<view class="value">
	<switch :checked="goodsItem.integralSelf" @change="integralSelfHandle" />
</view>

 

checked首次初始化默认值后,再去改变goodsItem.integralSelf变量值页面并无效果,变量值改变了,我猜测内部可能没有对checked属性做watch监听处理,所以导致视图没更新,据网友的说法是:

 

我尝试使用$set去处理,视图层仍然没有更新,也有可能是变量层级太深的原因:

this.$set(this.checkoutInfo.goods_list[0].goods[index2], "integralSelf", false)

然后我想到了一个方法,在switch组件外层添加一个变量isShowEle做if判断,先隐藏组件后显示,这样switch组件就会重新渲染数据了,唯一的缺点是按钮会有闪烁,这个闪烁时间可自行调节(我在代码设置了默认100毫秒),建议还是要做个定时器,毕竟页面加载需要耗时可能会导致switch按钮还是没生效。

<view class="value" v-if="!goodsItem.isShowEle">
	<switch :checked="goodsItem.integralSelf" @change="integralSelfHandle" />
</view>
this.$set(this.checkoutInfo.goods_list[0].goods[index2], "isShowEle", true) //先隐藏switch组件
this.$set(this.checkoutInfo.goods_list[0].goods[index2], "integralSelf", false) //修改checked绑定的变量值
this.$nextTick(()=>{
	setTimeout(()=>{
		this.$set(this.checkoutInfo.goods_list[0].goods[index2], "isShowEle", false) //显示switch组件
		this.$forceUpdate() //强制更新
	},100)
})

最终效果图如下:


评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员小鸿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值