关于直接赋值对象导致响应式丢失

1.问题复现如下:

复制代码
 <el-select v-model="item.question_type" placeholder="请选择" @change="txChangeFn(index,item.question_type)">
                                        <el-option
                                            v-for="item in txList"
                                            :key="item.value"
                                            :label="item.label"
                                            :value="item.value">
                                        </el-option>
                                    </el-select>

//题型变更
        txChangeFn(index,params){
            this.wenjuan.wtlist[index].question_type=params
            if(this.wenjuan.wtlist[index].question_type=='dan'){
                this.wenjuan.wtlist[index]={
                    "question_text": "", //问题
                    "question_type": "dan", // 'dan'单选, 'duo'多选, 'text'文本
                    "required": "Y", // 是否必答
                    "xxlist": [
                            {
                                option_text: ""
                            },
                            {
                                option_text: ""
                            },
                            {
                                option_text: ""
                            },
                            {
                                option_text: ""
                            }
                    ] //选项list 对于文本题,此数组可以为空或省略
                }
            }else if(this.wenjuan.wtlist[index].question_type=='duo'){
                this.wenjuan.wtlist[index]={
                    "question_text": "", //问题
                    "question_type": "duo", // 'dan'单选, 'duo'多选, 'text'文本
                    "required": "Y", // 是否必答
                    "xxlist": [
                            {
                                "option_text": ""
                            },
                            {
                                "option_text": ""
                            },
                            {
                                "option_text": ""
                            },
                            {
                                "option_text": ""
                            }
                    ]
                }
            }else if(this.wenjuan.wtlist[index].question_type=='text'){
                this.wenjuan.wtlist[index]={
                    "question_text": "",
                    "question_type": "text",
                    "required": "Y",
                    // 无选项
                }
            }
        }

问题出现:在<el-select>组件中使用@change事件只触发了一次,可能是因为在选择项变化后,v-model的值没有发生实际变化,导致@change事件没有再次触发。

解决办法:检查一下在txChangeFn(index, item.question_type)方法中是否有修改item.question_type的逻辑,确保每次选择项变化后v-model的值都有实际变化。另外,还可以尝试在txChangeFn方法中手动将item.question_type设置为一个新的值,以确保@change事件能够再次触发。

2.修改后的值

txChangeFn(index, params) {

this.wenjuan.wtlist[index].question_type = params;

if (params === 'dan') {

this.wenjuan.wtlist[index].xxlist = [

{ option_text: "" },

{ option_text: "" },

{ option_text: "" },

{ option_text: "" }

];

} else if (params === 'duo') {

this.wenjuan.wtlist[index].xxlist = [

{ option_text: "" },

{ option_text: "" },

{ option_text: "" },

{ option_text: "" }

];

} else if (params === 'text') {

// 无需修改xxlist

}

}

修改this.wenjuan.wtlist[index].question_type后,直接修改该对象的属性而不是重新赋值整个对象,既可以不影响响应式。

相关推荐
代码游侠4 分钟前
学习笔记——ARM Cortex-A 裸机开发实战指南
linux·运维·开发语言·前端·arm开发·笔记
m0_748254667 分钟前
CSS 编辑器
前端·css·编辑器
Amumu121389 分钟前
React扩展(二)
前端·javascript·react.js
rqtz13 分钟前
网页响应式布局方法
前端·css·响应式
郝学胜-神的一滴14 分钟前
Qt与Web混合编程:CEF与QCefView深度解析
开发语言·前端·javascript·c++·qt·程序人生·软件构建
m0_5027249517 分钟前
Arco Design Vue 中的a-upload
前端·javascript·arco design vue
967717 分钟前
最简单版web server
前端
VT.馒头21 分钟前
【力扣】2637. 有时间限制的 Promise 对象
前端·javascript·leetcode·typescript
zhengxianyi51521 分钟前
Vue2 打包部署后通过修改配置文件修改全局变量——实时生效
前端·vue.js·前后端分离·数据大屏·ruoyi-vue-pro
灵犀坠22 分钟前
Vue3 实现音乐播放器歌词功能:解析、匹配、滚动一站式教程
开发语言·前端·javascript·vue.js