求教:vue中的find()函数的用法&this.$set

需求:为了实现联动,当我在选择问题标题之后,后面几列的内容就会自动联动显示

方案一: 选完之后 直接 是this.questionList[index] = this.selected;

这样的效果虽然改动了数组,但是页面上没有显示出来实际数组的内容

于是改成了 this.$set(this.questionList,index,this.selected);

于是出现了第二种bug:

第一次选择还是正常的,第二次选择下拉框里面的内容 第一次选择项的id就会被替换掉

整个下拉框的options 内容变动了。就发生了如此神奇的事情。

复制代码
<el-table
          v-loading="loading"
          :data="questionList"
          @selection-change="handleSelectionChange"
        >
          <el-table-column
            label="问题标题"
            align="center"
            prop="title"
            width="250px"
          >
            <template slot-scope="scope">
              <el-select
                v-model="scope.row.id"
                placeholder=""
                clearable
                size="small"
                style="width: 200px"
                filterable  
                @change="selectQuestionChange(scope.$index, scope.row)"
              >
                <el-option
                  v-for="dict in questionOptions"
                  :key="`unique-${dict.id}-${dict.title}`"
                  :label="`${dict.id}-${dict.title}`"
                  :value="dict.id"
                />
              </el-select>
            </template>
          </el-table-column>

........................

下拉框里面的selectQuestionChange方法如下:

复制代码
selectQuestionChange(index, val) { 
      let selected = null;
      let options =[...this.questionOptions];
      if (val.id > "") {
        selected =options.findIndex((item) =>{ return item.id === val.id });
        
        this.selected = this.questionOptions[selected];
           this.$set(this.questionList,index,selected);
      } else {
        selected = {
          id: null,
          title: null,
          basis: null,
          isPitfall: null,
          isImportant: null,
          correction: null,
          createdTime: null,
          isDeleted: null,
        };
         this.$set(this.questionList,index,selected);
      }  

于是最终的解决方案就是 表格数组里的对象的值,都一个个进行对应的赋值

复制代码
        this.questionList[index].isPitfall = this.selected.isPitfall;
        this.questionList[index].isImportant = this.selected.isImportant;
        this.questionList[index].basis = this.selected.basis;
        this.questionList[index].correction = this.selected.correction;
相关推荐
胡gh4 小时前
页面卡成PPT?重排重绘惹的祸!依旧性能优化
前端·javascript·面试
胡gh4 小时前
简单又复杂,难道只能说一个有箭头一个没箭头?这种问题该怎么回答?
javascript·后端·面试
言兴4 小时前
# 深度解析 ECharts:从零到一构建企业级数据可视化看板
前端·javascript·面试
山有木兮木有枝_4 小时前
TailWind CSS
前端·css·postcss
烛阴5 小时前
TypeScript 的“读心术”:让类型在代码中“流动”起来
前端·javascript·typescript
杨荧5 小时前
基于Python的农作物病虫害防治网站 Python+Django+Vue.js
大数据·前端·vue.js·爬虫·python
Moment6 小时前
毕业一年了,分享一下我的四个开源项目!😊😊😊
前端·后端·开源
程序视点7 小时前
Escrcpy 3.0投屏控制软件使用教程:无线/有线连接+虚拟显示功能详解
前端·后端
silent_missile7 小时前
element-plus穿梭框transfer的调整
前端·javascript·vue.js
专注VB编程开发20年7 小时前
OpenXml、NPOI、EPPlus、Spire.Office组件对EXCEL ole对象附件的支持
前端·.net·excel·spire.office·npoi·openxml·spire.excel