el-checkbox点击无法回显

摘要:
真)<divclass=“hangeFlod”>divv if=“childObj.items”>{{childObj.param_name}}<label=“child.code”bordersize=“small”>{{child.value}}<spanv if=“childObj.items&<

问题:动态赋予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   v-if="childObj.items">
      <span class="checkTitle">{{ childObj.param_name }}</span
      >:
      <div   id="foldDiv">
        <el-checkbox
           
          v-model="childObj.isChecked"
          :label="childObj.param_name"
          :value="childObj.param_code"
          @change="handlerChange(1, childObj, $event)"
          border
          size="small"
          >不限</el-checkbox
        >
        <div
           
           
        >
          <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   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>

免责声明:文章转载自《el-checkbox点击无法回显》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇机器学习 —— 概率图模型(推理:消息传递算法)Pycharm简单配置及详细快捷键介绍下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

python学习笔记(九)内置函数

1 print(all([1,2,3,4]))#判断可迭代的对象里面的值是否都为真 True 2 print(any([0,1,2,3,4]))#判断可迭代的对象里面的值是否有一个为真 True 3 4 print(bin(10))#十进制转二进制 5 ejz=bin(100) #0b1010 6 print(ejz.replace('0...

mysql中文、英文别名排序问题,order by 关键字详解

 order by 关键字详解:   SELECT intcode AS 商品编码, product_title AS 名称, retailprice AS 零售价, purchaseprice AS 合同进价 FROM product_detail WHERE brand='0063飘柔' AND purchaseprice>10 ORDE...

【转载】】Appium Studio 初体验(windows做ios自动化,录制appium脚本)

  偶然的机会遇到了这个工具——Appium Studio, 在官网是这么解释的    Get your Appium testing projects going within minutesInstall Appium Studio with a single click along with all the required development...

MSSQL 触发器

---触发器练习 --在SQL Server里面也就是对某一个表的一定的操作,触发某种条件,从而执行的一段程序 CREATE TABLE Student ( SID INT PRIMARY KEY --学号 ) CREATE TABLE BorrowRecord ( --学生借书记录表...

用node-http-proxy搭建代理

程序员三大必备网站是:Google、Github、StackOverflow。如果你还在用Baidu搜索技术文章的话,我想说的是,少年你已经被鄙视很多年了,赶紧换成谷歌吧,不要再被鄙视了!Github、StackOverflow在国内能够正常访问,但是Google由于众所周知的原因,国内无法访问,所以我们需要FQ访问Google。个人觉得shadowsoc...

AR的一些常见的操作

一、查询数据集合 1、$admin=Admin::model()->findAll($condition,$params); 该方法是根据一个条件查询一个集合,如:   findAll("username=:name",array(":name"=>$username));      2、$admin=Admin::model()->...