在使用uniapp分段器 u-subsection时,组件只会在框架内的加载一次,后续想更改分段器内部的数据,无论如何都不会渲染出来,虽然data内数据变了,但是组件始终不会渲染上这些数据。
<view class="u-tabs-box padding_box"> <u-subsection :list="equipmentCountList" active-color="#1B93F8" mode="subsection" :current="current" @change="sectionChange"></u-subsection> </view>
这里我们改变equipmentCountList的值,始终不会渲染到页面上,vue有三种强制刷新的方法。
1. v-if(比较消耗性能)
2.给list加key,动态改变key
3.this.$forceUpdate
结果发现,this.$forceUpdate并不生效,使用v-if,v-else只能动态改变一次。u-subsection不支持加key的方式。最终通过给外层的DOM加一个标识,使用v-if,在改变标识后,延迟改变标识的方式成功解决。
<view class="u-tabs-box padding_box" v-if="update"> <u-subsection :list="equipmentCountList" active-color="#1B93F8" mode="subsection" :current="current" @change="sectionChange"></u-subsection> </view>
update默认为false
在我们请求接口前,把update设置为false,请求接口后设置为true,使组件强制重新加载
this.update = false; //这个timeout相当于后台请求 setTimeout( ()=>{ _this.equipmentCountList = [ { name: '在线00000('+res.data.all+')' }, { name: '在线('+res.data.online+')' }, { name: '离线('+res.data.offline+')' } ] //请求结束后更改update的值 setTimeout(()=>_this.update = true,0) },3000 )
通过这种方法可以使uniapp组件强制重新加载。适用于那些不支持key,this.$forceUpdate不生效的组件。