el-select多个多选的情况下已经选中的不允许再选择

1.重点:给:disabled使用一个函数 (checkDisabled)

<el-form-item :prop="'tableData.' + scope.$index + '.returnWarehouseIds'" :rules="[{ required: true, message: '请选择地址', trigger: 'change' }]">
   <el-select
     style="width: 100%"
     v-model="scope.row.returnWarehouseIds"
     placeholder="请选择"
     multiple
     collapse-tags
     clearable
   >
     <el-option v-for="innerItem in returnWarehouseIdsList" :key="innerItem.id" :label="innerItem.returnWarehouseName" :value="innerItem.id" :disabled="checkDisabled(scope.row.returnWarehouseIds,innerItem)"> </el-option>
   </el-select>
 </el-form-item>

2.checkDisabled函数体

   // 动态disabled
    checkDisabled(val, item) { 
      // 定义变量
      let flag = false;
      let allSelected = []
      // 存储所有选中的值
      this.formData.tableData.map((item) => {
        allSelected = allSelected.concat(item.returnWarehouseIds)
      })
      // 不在当前选中项 并且在所有选中项里面
      if (!val.includes(item.id) && allSelected.includes(item.id)) {
        flag = true;
      }
      return flag;
    },
<think>我们被要求回答:在el-form-item中设置el-select时默认选中的方法。 根据Element UI文档,el-select时设置默认选中值,通常是通过v-model绑定一个数组来实现。数组中的元素就是选中项值。 步骤: 1. 在data中定义一个数组,用于绑定到el-select的v-model上。 2. 将需要默认选中项值放入这个数组中。 3. 确保el-select的multiple属性已设置为true(表示)。 示例代码: ```html <template> <el-form :model="form" label-width="100px"> <el-form-item label=""> <el-select v-model="form.selectedOptions" multiple placeholder="请选择"> <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value" > </el-option> </el-select> </el-form-item> </el-form> </template> <script> export default { data() { return { form: { // 设置默认选中的值,数组元素为项的value值 selectedOptions: ['option1', 'option3'] // 这里默认选中value为'option1'和'option3'的项 }, options: [ { value: 'option1', label: '项1' }, { value: 'option2', label: '项2' }, { value: 'option3', label: '项3' }, { value: 'option4', label: '项4' }, { value: 'option5', label: '项5' } ] }; } }; </script> ``` 解释: 在data的form对象中,我们定义了一个数组`selectedOptions`,并初始化了默认选中的值(例如:['option1','option3'])。这样在组件渲染时,el-select就会显示出这两个项已选中。 注意事项: - 确保`selectedOptions`数组中的值在`options`中存在,否则会显示为选中状态。 - 如果数据是异步获取的,需要在获取到数据后再设置默认值(比如在mounted或异步回调中赋值)。 如果项数据是异步获取的,则需要在获取数据后,将默认选中的值赋给`selectedOptions`。例如: ```javascript mounted() { // 模拟异步获取项 setTimeout(() => { this.options = [ { value: 'option1', label: '项1' }, // ... 其他项 ]; // 然后设置默认选中的值 this.form.selectedOptions = ['option1', 'option3']; }, 1000); } ``` 这样,当异步数据加载完成后,默认选中的值就会被设置。 关于用户提供的引用内容,虽然提到了样式问题和宽度自适应问题,但与本问题(设置默认选中)关系大,因此我们主要关注如何设置默认选中值。 如果用户同时遇到了样式问题,可以参考引用中提到的调整样式的方法,但本问题主要解决默认选中设置。 §§相关问题§§ 1.Element UI中,如何动态改变el-select选中值? 2. el-select模式下,如何限制选择的数量? 3. 如何实现el-select项的全和取消全功能? </think>在 Element UI 的 `el-form-item` 中设置 `el-select` 默认值的方法如下: ### 解决方案 1. **绑定默认值数组** 在 `v-model` 绑定的数据中,**初始化为包含所项值的数组**。模式要求绑定值必须是数组类型: ```html <el-form :model="form"> <el-form-item label="字段"> <el-select v-model="form.selectedValues" multiple <!-- 启用 --> > <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value" /> </el-select> </el-form-item> </el-form> ``` 2. **定义初始值** 在组件的 `data` 中声明默认选中的值(数组格式): ```javascript data() { return { form: { selectedValues: ['value1', 'value3'] // 默认选中值 }, options: [ { value: 'value1', label: '项1' }, { value: 'value2', label: '项2' }, { value: 'value3', label: '项3' } ] } } ``` ### 关键说明 - ✅ **模式必需**:确保添加 `multiple` 属性 - ✅ **数组绑定**:`v-model` 绑定的初始值必须是数组(如 `['value1','value3']`) - ✅ **值匹配**:数组中的值必须存在于 `options` 的 `value` 字段中 - ⚠️ **异步数据**:若项是异步加载,需在数据获取后设置默认值: ```javascript async created() { const res = await fetchOptions(); this.options = res.data; this.form.selectedValues = ['value1', 'value3']; // 数据到位后赋值 } ``` ### 效果验证 默认选中效果如下(假设初始值包含 `value1` 和 `value3`): ``` 字段 [项1 ✓] [项2] [项3 ✓] ``` --- ### 相关问题 1. 如何清空 `el-select` 框的已值? 2. `el-select` 模式下如何实现远程搜索功能? 3. 模式下如何自定义已项的显示样式?
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值