vue中 type=“selection“ 勾选框的回显问题

当勾选完数据点击保存按钮传到其他页面之后,再次打开该页面勾选状态的回显问题,也涉及到父组件和子组件参数互相传递功能

 子组件中把勾选好的数据传到父组件,用 'save' 接收:

onSave() {
      const _this = this
      if (this.multiple) {
        //把勾选好的数据传给父组件
        this.$emit('save', [..._this.multipleSelection])
      }
    },

 父组件通过@save接收,执行onReviewersSave()方法

<member-search
  ref="member-search"
  :multiple="true"
  :visible="reviewersVisible"
  :transferData="transferData"   //回显已勾选的数据传回子组件
  @close="onReviewersClose"
  @save="onReviewersSave"        //save接收已勾选的数据
/>

<script>
export default {
  data() {
      //定义多选框回显数据
      transferData: [],
  },
  methods: {
      onReviewersSave(v) {
      //把勾选传回来的数据给 transferData[] 赋值用于回显功能
      this.transferData = v      

      //执行其他的显示操作
      const reviewersData = v.map((item) => {
        return {
          reviewerName: item.nickName,
          reviewerId: item.openId
        }
      })
      this.reviewers = reviewersData
      this.reviewersVisible = false
    }
  }
}
</script>

子组件接收已经勾选的数据,与子组件中  tableData的id字段  进行比对,符合要求进行多选框回显功能

export default {
  props: {
    //接收父组件的 transferData  定义为 Array 类型
    transferData: {
      Type: Array
    }
  },
  methods: {
    /**
     *获取子组件列表数据
     */
    async getList(param) {
      this.listLoad = true
      try {
        const res = await getMemberListData({
          ...param,
          current: param?.current || 1,
          size: param?.size || 10
        })
        if (res.code === 200) {
          this.tableData = res.data
          this.total = res.total
          this.current = res.current
          this.size = res.size
          // 使表单与搜索条件统一,防止翻页的时候表单数据与搜索条件不对应而产生误导
          this.formData = { ...this.searchData }

          //调用回显方法
          this.getReviewersData()  
        } else {
          this.$message.error(res.message)
        }
        this.listLoad = false
        return res
      } catch (error) {
        return error
      } finally {
        this.formLoading = false
      }
    },

   //执行回显功能
    async getReviewersData() {
      //判断 transferData 是否为空
      if (this.transferData !== null ) {
        this.transferData.forEach((el) => {
          for (let i = 0; i < this.tableData.length; i++) {
            if (el.id === this.tableData[i].id) {
              this.$nextTick(() => {
                //判断回显数据与本页tableData数据相匹配,匹配成功勾选框状态变为true
                this.$refs.multipleTable.toggleRowSelection(this.tableData[i],true)
              })
            }
          }
        })
      }
    },
 
 }
}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值