• 关于element-ui table中自定义单选或者多选框的时候,无法选择的解决


    由于表格由后台返回的数据,根据不同的类型,显示不同的方式,

     第一种方法:针对select,使用@change和$forceUpdate 来解决(无法解决input是动态生成的v-model的问题,可以使用下面的第二种方式)

    <el-table-column v-for="(icolm,icolx) in icm.temColumn" :key="icolx" :prop="icolm.key" :label="icolm.name" :width="icolm.width" >
       <template  slot-scope="scope">
           <div v-if="icolm.key !='isflag'&&icolm.key !='role'">{{scope.row[icolm.key]}}</div>
           <div v-if="icolm.anthorkey &&icolm.anthorkey.indexOf('%select')>-1">{{renderColoumSelect(scope.row,icolm.anthorkey,'%select')}}</div>
           <!-- 是否的操作 -->
           <div v-if="icolm.key =='isflag'">
              <el-radio-group v-if="opetype=='approval'" v-model="scope.row.isflag" disabled @change=radioChange(arguments,icm.datalists,scope.$index)>
                    <el-radio label="1">是</el-radio>
                 <el-radio label="2">否</el-radio>
             </el-radio-group>  
             <div v-else>
                  {{scope.row[icolm.key]=="1"?"是":"否"}}
             </div>
          </div>
          <!-- 对应的角色 -->
          <div v-if="icolm.key =='role'">{{roleObj[scope.row[icolm.key]]}}</div>
      </template>
    </el-table-column>

    由于表格的列是动态生成的,vue是监听不到嵌套中的双向绑定的值,所以,当我再页面上切换单选或者是下拉的时候,页面不会发生变化

    这时需要进行强制刷新数据

    /**
    * arg - 表示radio变化时的默认参数
    * item - 表示当前表格的data数据
    * index - 当前修改的数据的索引
    */
    radioChange(arg,item,index){
    this.$set(item,index,item[index]); this.$forceUpdate() },

     第二种方法(简单快捷,一步到位)

    一般情况是,我们的这个select和input等表单是放在v-for中,循环lists列表,v-model绑定的是循环出来的值

    在我们动态新增了或者修改了lists,我们可以

    let copy_data =JSON.parse(JSON.stringify(this.lists));
    this.lists = [];
    this.lists= copy_data;
    这里要注意,如果你的lists 是一个多维对象的话,使用数组的concat,slice或者Object.assign都不是深克隆
    一定要使用对  对象进行深克隆的方式来进行对列表进行重新赋值
     
    这种方式直接解决了所有动态生成的v-model的问题,也不需要对列表进行$set
     

    第三种情况(上面两种情况都不行 - 具体为啥我也不知道)

    使用场景:依然是最上面的那个表格,新增一个编辑列头的功能

     使用$set,forceUpdate,以及重新赋值都不能更新视图,后台打印数据是更新过的

    为了实现更新inpput中的值,只能每次@input事件中,进行更新循环的key值,
    <el-table-column v-for="(icolm,icolx) in icm.temColumn" :key="icolm.sign" :prop="icolm.key" :label="icolm.name" :width="icolm.width" min-width="140"> <template slot="header"> <div v-if="icolm.key =='role'"> {{icolm.name}} </div> <div v-else> <el-input v-model="icolm.name" style="78%;" @input="changeColumnName(index,icx,icolx)" @change="changeColumnName(index,icx,icolx)"> </el-input> <i class="el-icon-remove c-error m-r-l-10 c-p" title="移除当前列" @click="operateTable('deleteCol',index,icx,icolm.key)"></i> </div> </template> <template slot-scope="scope"> 1111 </template> </el-table-column>
    changeColumnName(index,icx,icolx){
         let this_ = this;
         this.$forceUpdate();
         this.editableTabs[index].tableLists[icx].temColumn.forEach(item=>{
             item.sign = generateMixed(6);  
         });
         this.$set(this.editableTabs[index].tableLists[icx].temColumn,icolx,this.editableTabs[index].tableLists[icx].temColumn[icolx])
    },

    这样就可以实现 input输入

    缺点:一次只能输入一个,因为列表进行了刷新,很不方便使用

     
     
  • 相关阅读:
    set与map
    统计一个字符串中出现了多少个不同的字符
    求序列中所有不同的连续子串的数量
    79、idea IDE Eval Reset
    78、idea控制台报 java: 无效的目标发行版: 14
    16、docker安装minio
    77、idea中添加maven项目右侧无maven
    76、mysql5.7安装教程
    74、js向上递归
    72、解决IntelliJIDEA没有Spring Initializr
  • 原文地址:https://www.cnblogs.com/fyjz/p/13360791.html
Copyright © 2020-2023  润新知