• el-select 绑定对象和el-checkbox-group用法


    先说下el-select,下面直接给代码:

    1. "$t('hardwareDetail.type')" prop="type">
    2. select
    3. clearable
    4. filterable
    5. remote
    6. :placeholder="$t('selectPlaceholder')"
    7. class="header-search-select"
    8. value-key="id"
    9. @change="handleSelectType"
    10. v-model="form.type"
    11. style="width: 100%"
    12. >
    13. option v-for="item in typeOptions" :key="item.id" :value="item" :label="item.typeName" />
    14. select>

    其中:value = "item" 表明绑定是value值是对象,lebel显示下拉框展示的内容,这里v-model="form.type"其实内容也是item对象,但是显然我们后台只需要的是item的id,也就是业务的typeId(类型id),所以这里需要多一个@change="handleSelectType"进行赋值form表单的typeId.

    这里有个很重的点,el-select里有个属性:value-key="id" 一定要,这里是value绑定对象必须要的,可以看官网有解释。

    1. handleSelectType(val) {
    2. this.form.typeId = val.id
    3. if (val.storageType === '0') {
    4. this.isPerson = true
    5. } else {
    6. this.isPerson = false
    7. }
    8. }

    上面方法里的val就是你选中的内容的对象,这里我不仅需要给form赋值,还需要做一些逻辑判断,比如根据val里的storageType判断isPerson,同时这样也解决了有些表,既需要id,又需要name一些字段,而select框绑定的value只能有一个的问题,这里都可以根据val给form表单赋值。但是该行数据编辑的时候,会有问题,因为我们通过从后台拿的是typeId(主键),而不是把整个对象给返回,而这里绑定的v-model就是对象,显然这样初始化显示会有问题,那么我们需要这么做,如下:

    1. handleEdit(row) {
    2. this.$refs.editHardwareDetailDialog.open().then(that => {
    3. row.type = { id: row.typeId }
    4. that.initData(row, 'edit')
    5. })
    6. }

    因为我这个是父组件给子组件(弹窗)赋值的,上面的row就是传给子组件的form表单赋值的数据,因为原来row里面只有typeId, 无法和 v-model="form.type"对象绑定,这里给row手动添加一个type对象,select组件会根据key(typeId)查到对应的需要展现的数据(我以前认为是value,这里看起来应该是根据key)。

    下面说的是el-checkbox-group的用法,直接上图:

    1. v-model="checkedAttrs"
    2. >
    3. <el-checkbox v-for="item in allAttrs" :key="item.id" :label="item.id">
    4. {{ item.attrName }}
    5. el-checkbox>
    6. this.checkedAttrs = val2.map(item => {
    7. return item.id
    8. })

    allAttrs 是数组对象,表示的是所有checkbox(也就是包括选中的和没有选中), 注意这里显示文本是根据{{ item.attrName }}显示的,不是label。这里的label才是checkbox的绑定值,这里不能用对象绑定,用对象会有问题,而v-model="checkedAttrs"就是后台传过来的已勾选的数据,通常后台传过来的也是和allAttrs一样的数组对象,但是这里不能用数组对象,这里checkedAttrs里的内容要和label里内容是同样的,这里的label绑定的是id,那么checkedAttrs也是已勾选的数据的id数组,而不是对象数组,下面是映射方法,其中val2是后台传过来的对象数组,我们需要自己处理下:

    1. this.checkedAttrs = val2.map(item => {
    2. return item.id
    3. })

    萌新由于刚接触前端,很多知识也都是一知半解,这里只记录下一些用法总结,不正确的地方望各位大佬指正。

  • 相关阅读:
    飞行动力学 - 第17节-part3-垂尾和推进系统对航向的影响 之 基础点摘要
    2024年04月在线IDE流行度最新排名
    php 去除多维数组重复出现的值
    nginx + php 502
    单机高性能网络模型
    【DZ模板】价值288克米设计APP手机版DZ模板 数据本地化+完美使用
    vSphere6.7创建Windows Server 2016虚拟机及磁盘扩容
    AWS SAP-C02教程5--基础中间件
    Node.js开发-fs模块
    数字 IC 设计、FPGA 设计秋招笔试题目、答案、解析(2)2021 华为海思(上)
  • 原文地址:https://blog.csdn.net/qq_25313187/article/details/126154654