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

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后,直接修改该对象的属性而不是重新赋值整个对象,既可以不影响响应式。

相关推荐
遇到困难睡大觉哈哈6 小时前
Harmony os 静态卡片(ArkTS + FormLink)详细介绍
前端·microsoft·harmonyos·鸿蒙
用户47949283569157 小时前
Bun 卖身 Anthropic!尤雨溪神吐槽:OpenAI 你需要工具链吗?
前端·openai·bun
p***43487 小时前
前端在移动端中的网络请求优化
前端
g***B7387 小时前
前端在移动端中的Ionic
前端
大猩猩X7 小时前
vxe-gantt 甘特图使用右键菜单
vue.js·vxe-table·vxe-ui·vxe-gantt
拿破轮7 小时前
使用通义灵码解决复杂正则表达式替换字符串的问题.
java·服务器·前端
whltaoin7 小时前
【 Web认证 】Cookie、Session 与 JWT Token:Web 认证机制的原理、实现与对比
前端·web·jwt·cookie·session·认证机制
Aerelin8 小时前
爬虫playwright入门讲解
前端·javascript·html·playwright
5***o5008 小时前
前端在移动端中的NativeBase
前端
灵魂学者8 小时前
Vue3.x —— 父子通信
前端·javascript·vue.js·github