vue $forceUpdate() 强制页面重新渲染问题(v-for循环值刷新等)

问题描述:

在使用Vue框架开发时,v-for里面数据层次太多, 修改过数据变了,页面没有重新渲染,需手动强制刷新;又或者在函数中改变了页面中的某个值,在函数中查看是修改成功了,但在页面中没有及时刷新改变后的值;

解决:

运用 this.$forceUpdate() 强制刷新(因为数据层次太多,render函数没有自动更新,需手动强制刷新。)官网解说如下https://cn.vuejs.org/v2/api/#vm-forceUpdate

代码案例

<Select v-model="carSafeLine.insuranceName" placeholder="请选择" class="mulisel option-h" filterable clearable :disabled="editstatus" @on-change="selectInsurance">
  <Option v-for="item in dataArr" :key="item.code" :value="item.code" :label="item.codename" :disabled="item.disabled"></Option>
</Select>

methods: {
  selectInsurance(){ //刷新车辆保险可选状态
    for(var i=0; i<this.dataArr.length; i++){ 
      var flag = false; //默认没有选中
      var itemI = this.dataArr[i];

      for(var j=0; j<this.form.carInsuranceVOList.length; j++){ //检测选项是否已被选中过
        var itemJ = this.form.carInsuranceVOList[j];
        if(itemI.code == itemJ.insuranceName){
          flag = true;
          break;
        }
      }

      if(flag){
        itemI.disabled = true;
      }else{
        itemI.disabled = false;
      }
    }

    this.$forceUpdate(); //强制刷新,解决页面不会重新渲染的问题
  }
}

 

 如果是在(element-ui)下拉菜单中下拉框选择后绑定值改变,显示不变也可以如下代码这样写:

( 添加 @change="$forceUpdate()" )

<el-select 
  v-model="reqData.coupon_code" 
  class="w160"
  @change="$forceUpdate()"
  placeholder="请选择订单类型"
  size="small">
  <el-option
  v-for="(item,index) in orderList"
  :key="index"
  :label="item.name"
  :value="item.id">
  </el-option>
</el-select>

参考:https://blog.csdn.net/xuaner8786/article/details/81217075

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
除了使用 $forceUpdate() 方法之外,在 Vue刷新页面绑定的数据还有其他方法,例如: 1. 使用 computed 属性 Vue 的 computed 属性可以用来计算响应式数据,当计算属性依赖的数据发生变化时,会自动触发计算属性的更新。你可以将需要刷新的数据作为计算属性,然后在需要刷新数据的方法中修改计算属性的依赖数据,从而触发计算属性的更新。例如: ```javascript // 在 Vue 实例中定义计算属性 computed: { refreshedData() { return this.data; } }, methods: { refreshData() { // 修改数据 this.data = 'new data'; // 修改计算属性的依赖数据 this.$nextTick(() => { this.data = 'new data2'; }); } } ``` 这样就可以在不重新加载页面的情况下刷新 Vue 绑定的数据了。 2. 使用 watch 属性 Vue 的 watch 属性可以用来监听数据的变化,并执行相应的操作。你可以将需要刷新的数据作为监听属性,然后在需要刷新数据的方法中修改监听属性,从而触发监听属性的回调函数。例如: ```javascript // 在 Vue 实例中定义监听属性 watch: { data: { handler: function(newValue, oldValue) { // 执行刷新操作 }, deep: true } }, methods: { refreshData() { // 修改数据 this.data = 'new data'; } } ``` 这样就可以在不重新加载页面的情况下刷新 Vue 绑定的数据了。 需要注意的是,使用 computed 属性和 watch 属性虽然可以实现数据的刷新,但是它们都需要依赖数据的变化来触发更新,因此可能会存在一定的延迟。如果需要实时刷新数据,建议使用 $forceUpdate() 方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值