1 问题简介

  使用<el-select><el-option></el-option></el-select>下拉框时,修改了options数组的值。

  从控制台中可以看到options中的值已经变化,但是页面展示仍为旧数据,没有变化

<el-select
  ref="select"
  v-model="value"
  placeholder="请选择"
  style="width: 250px"
>
    <el-option
     v-for="item in options"
     :key="item.id"
     :label="item.label"
     :value="item.value"
    >
    </el-option>
</el-select>

 

2 问题分析

1)可能性1

:value="item.value"这里绑定的value值的格式类型和v-model="value"这里的value的格式类型不一样,如前面的是数字,后面的是字符串
发现格式类型没问题

2)可能性2

  vue监听动态属性的变化错误,没有监听到值的变化,渲染失败

 

3 解决方案

  针对可能性2

1)方案1

  在el-select上绑定change方法,在选项值发生变化时进行$set赋值

changeData(val) { // 此处val为value的值
        if(val){
            this.$set(this.form, this.form.year, val)
        }else{
            this.$set(this.form, this.form.year, '')
        }
    }

 

2)方案2

  使用$foreceUpdate()每当值发生变化时进行强制渲染

  我采用的这种方案,有效

changeData() { // 修改时没有监听到变化,强制渲染可以解决
      this.$forceUpdate()
}