zoukankan      html  css  js  c++  java
  • 关于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输入

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

     
     
  • 相关阅读:
    GTK+ 3.6.2 发布,小的 bug 修复版本
    RunJS 新增 Echo Ajax 测试功能
    Mozilla 发布 Popcorn Maker,在线创作视频
    Sina微博OAuth2框架解密
    Mina状态机State Machine
    Mozilla 发布 Shumway —— 纯JS的SWF解析器
    Code Browser 4.5 发布,代码浏览器
    ROSA 2012 "Enterprise Linux Server" 发布
    ltrace 0.7.0 发布,程序调试工具
    Artifactory 2.6.5 发布,Maven 扩展工具
  • 原文地址:https://www.cnblogs.com/fyjz/p/13360791.html
Copyright © 2011-2022 走看看