Vue 2 + Element UI 选择一个el-select清空另一个el-select选中的值

需求:表单中有两个下拉选择器,先选中第一个,清空第二个选中的值

尝试过this.$refs['form'].resetFields('field name');全都失效!

效果图如下: 

 

 先选择商品分类,再去选择商品列表中的某一件商品 

<el-form-item label="商品分类">
                <el-select v-model="form.goodsSort" clearable placeholder="请选择商品分类" @change="searchGoodsList">
                    <el-option v-for="item in goodsSortOpt" :key="item.optVal" :label="item.label"
                        :value="item.optVal" />
                </el-select>
            </el-form-item>
            <el-form-item label="商品列表">
                <el-select v-model="form.goodsId" clearable filterable placeholder="请选择商品列表" popper-class="goodsSort" @change="changeGoods">
                    <el-option v-for="item in goodsOpt" :key="item.id" :label="item.goodsName"
                        :value="item.id" />
                </el-select>
            </el-form-item>

js部分代码

searchGoodsList(item){//根据商品分类查找商品列表
    delete this.form.goodsId     
},

处理方式是:删除掉需要删除的下拉组件绑定的表单id

### 关于 `el-cascader` 组件单个选项选中后整组全选的问题 在 Element UI 的 `el-cascader` 组件中,默认情况下,当用户点击某个节点时,可能会触发其父级分组的全部选中行为。这种现象通常是因为组件默认的行为逻辑所致。如果希望实现更精细的控制,可以通过调整配置参数或者自定义事件处理来解决问题。 以下是解决方案的具体说明: #### 方法一:通过设置 `props.checkStrictly` 属性 Element UI 提供了一个名为 `checkStrictly` 的属性,用于改变树形结构的选择模式。启用该属性后,可以允许父子节点之间的关联关系断开,从而避免子节点选中时自动勾选父节点的情况[^1]。 ```javascript <template> <el-cascader v-model="selectedValue" :options="options" :props="{ checkStrictly: true }" @change="handleChange"> </el-cascader> </template> <script> export default { data() { return { selectedValue: [], options: [ { value: 'group1', label: 'Group 1', children: [ { value: 'option1', label: 'Option 1' }, { value: 'option2', label: 'Option 2' } ] } ] }; }, methods: { handleChange(value) { console.log('Selected Value:', value); } } }; </script> ``` 上述代码片段展示了如何通过 `props.checkStrictly` 来禁用父子节点间的联动效果。 --- #### 方法二:手动管理选中状态 一种方法是完全接管 `el-cascader` 的选中逻辑。这需要监听 `@change` 或者其他相关事件,并根据业务需求动态更新绑定。 ```javascript <template> <div> <el-cascader v-model="selectedValue" :options="options" @change="handleCustomChange"> </el-cascader> </div> </template> <script> export default { data() { return { selectedValue: [], options: [ { value: 'group1', label: 'Group 1', children: [ { value: 'option1', label: 'Option 1' }, { value: 'option2', label: 'Option 2' } ] } ] }; }, methods: { handleCustomChange(value) { const lastLevel = value[value.length - 1]; if (lastLevel === 'option1') { this.selectedValue = ['group1', 'option1']; // 手动指定选中路径 } else { this.selectedValue = []; // 清空选中或其他操作 } } } }; </script> ``` 这种方法适用于更加复杂的场景,比如某些特定条件下不允许选中某类节点。 --- #### 方法三:重写渲染器(高级) 对于极端定制化的需求,还可以考虑使用 `scoped-slot` 自定义每一层的内容展示方式以及交互逻辑。这种方式虽然复杂度较高,但能够彻底摆脱框架自带功能的限制。 ```vue <template> <el-cascader v-model="selectedValue" :options="options" :props="{ expandTrigger: 'hover' }"> <template slot-scope="{ node, data }"> <span>{{ data.label }}</span> <!-- 定制显示 --> <span v-if="!node.isLeaf">({{ data.children.length }})</span> </template> </el-cascader> </template> ``` 此示例仅演示了简单的模板覆盖,实际应用中可能还需要额外编写 JavaScript 脚本来增强功能性。 --- ### 注意事项 尽管以上三种方法都可以有效解决 `el-cascader` 中单个选项选中却引发整组全选的问题,但在具体实施前需评估项目的实际情况。例如,是否真的有必要关闭父子节点间的关系?是否会因此影响用户体验? 此外,在涉及列宽自适应内容的情况下,可参考思路一是利用 CSS 和 DOM 操作计算每列的最大宽度并动态调整样式[^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JavaGirl_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值