zoukankan      html  css  js  c++  java
  • el-checkbox点击无法回显

    问题:动态赋予el-checkbox给isChecked属性时候,前端样式不生效

    原因:前端添加checked属性, vue并没有添加get set方法,因此,监听不到checked值变化,进而不能更新view。

    方案:
    用set方法

     this.$set(item2, 'isChecked', true)
    
    <!--
     * @Author:wht
     * @Date: 2021-04-25 14:44:03
     * @LastEditTime: 2021-06-09 16:20:20
     * @LastEditors: Please set LastEditors
     * @Description: 多选
     * @FilePath: /donghuang/src/components/CheckSelect/CheckMulti.vue
    -->
    <template>
      <div class="hangeFlod">
        <div class="multi-check-item" v-if="childObj.items">
          <span class="checkTitle">{{ childObj.param_name }}</span
          >:
          <div class="foldDiv" id="foldDiv">
            <el-checkbox
              class="mr20 noLimit"
              v-model="childObj.isChecked"
              :label="childObj.param_name"
              :value="childObj.param_code"
              @change="handlerChange(1, childObj, $event)"
              border
              size="small"
              >不限</el-checkbox
            >
            <div
              class="muti-sum-wrap multi-check-item"
              style="display:inline-block"
            >
              <el-checkbox
                v-model="child.isChecked"
                @change="handlerChange(2, childObj, $event)"
                v-for="(child, index2) in childObj.items || []"
                :key="child.value + index2"
                :label="child.code"
                border
                size="small"
                >{{ child.value }}</el-checkbox
              >
            </div>
          </div>
          <span class="foldBtn" v-if="childObj.items && childObj.items.length > 6"
            >展开</span
          >
        </div>
      </div>
    </template>
    
    <script>
    export default {
      props: {
        dataObj: {
          //数据集合
          type: Object,
          required: true
        }
      },
      data() {
        return {
          childObj: {}
        }
      },
      watch: {
        dataObj: {
          handler: function(newval, oldval) {
            this.childObj = newval
            this.childObj.items.forEach((item2, index2) => {
              if (
                this.childObj.checkedList &&
                this.childObj.checkedList.length > 0
              ) {
                this.childObj.checkedList.forEach((item3, index3) => {
                  if (item2.code == item3) {
                    this.$set(item2, 'isChecked', true)
                  }
                })
              }
            })
          },
          //立即执行
          immediate: true
        }
      },
    
      computed: {
        getDataList() {
          let childList = []
          this.childObj.items.forEach((child, index2) => {
            if (child.isChecked) {
              childList.push(child.code)
            }
          })
          return childList
        }
      },
      created() {},
      mounted() {
        this.$nextTick(() => {
          $('.hangeFlod').on('click', '.foldBtn', function() {
            let nowStatus = $(this).html()
            if (nowStatus == '展开') {
              $(this).html('收起')
              $(this)
                .prev()
                .css('height', 'auto')
            } else {
              $(this).html('展开')
              $(this)
                .prev()
                .css('height', '42px')
            }
          })
        })
      },
      methods: {
        /**
         * 类型   当前数据  事件
         */
        handlerChange($type, $row, $event) {
          let isChecked = !$event.target ? $event : $event.target.checked
          if ($type === 1) {
            $row.items.forEach(item => {
              if (isChecked) {
                this.$set(item, 'isChecked', !isChecked)
              } else {
                this.$set(item, 'isChecked', isChecked)
              }
            })
          }
          const checkCount = $row.items.reduce((prev, cur) => {
            let check = 0
            if (cur.isChecked === undefined || cur.isChecked == false) {
              check = 0
            } else {
              check = +cur.isChecked
            }
            return prev + +check
          }, 0) //统计选择的次数
          this.$set($row, 'isChecked', checkCount && checkCount > 0 ? false : true)
          this.$emit('change', this.getDataList, $row.param_code)
        }
      }
    }
    </script>
    <style lang="scss" scoped>
    .noLimit {
      min- 100px;
    }
    
    .checkTitle {
      display: inline-block;
      min- 60px;
      text-align: justify;
      text-align-last: justify;
      box-sizing: border-box;
      color: #666;
      font-size: 14px;
    }
    
    .el-checkbox {
      margin-right: 20px;
    }
    
    .el-checkbox.is-bordered.el-checkbox--small .el-checkbox__label {
      min- 50px;
      font-size: 13px;
    }
    .el-checkbox.is-bordered.el-checkbox--small {
      background: #fff;
    }
    .foldDiv {
      display: inline-flex;
       75%;
      height: 42px;
      overflow: hidden;
    }
    .muti-sum-wrap {
      .el-checkbox.is-bordered.el-checkbox--small {
        min- 100px;
        margin-bottom: 10px;
      }
      .el-checkbox.is-bordered + .el-checkbox.is-bordered {
        margin-left: 0;
      }
    }
    .foldBtn {
      font-size: 13px;
      cursor: pointer;
      color: #5992e1;
      user-select: none;
    }
    </style>
    
    
  • 相关阅读:
    如何用CSS实现中间自适应,两边定宽三栏布局
    [转]通过Spring Boot三分钟创建Spring Web项目
    [转]Java Web笔记:搭建环境和项目配置(MyEclipse 2014 + Maven + Tomcat)
    [转]单元测试、集成测试、确认测试、系统测试、验收测试
    [转]maven全局配置文件settings.xml详解
    [转]解决-Dmaven.multiModuleProjectDirectory system property is not set. Check $M2_HOME environment variable and mvn script match.
    [转]PO BO VO DTO POJO DAO概念及其作用(附转换图)
    [转]如何提升你的能力?给年轻程序员的几条建议
    从oracle导出数据成csv,将csv导入mongodb问题
    Windows下Mongodb启动问题
  • 原文地址:https://www.cnblogs.com/hanhaiyuntao/p/15186357.html
Copyright © 2011-2022 走看看