elementui 下拉框回显_element-ui 中el-select表单不回显和校验不通过的问题

本文讲述了在ElementUI中遇到的下拉框回显及表单验证不通过的问题。在部门切换时,清空负责人选项并进行异步更新导致回显失败且无法通过非空验证。通过在change事件中使用`$set`更新负责人字段解决了这个问题,但对引发问题的原因进行了疑问,可能是由于异步渲染或数据监听不到位。
摘要由CSDN通过智能技术生成

项目中有一个需求,填写表单,有两个相关联的下拉框,要根据部门筛选部门内的人员

当部门切换时,清空负责人里的内容

一开始的写法

v-for="(item,i) in getDepartments"

:key="i"

:label="item.name"

:value="item.id"

>

v-for="(item,i) in headuserList"

:key="i"

:label="item.name"

:value="item.id"

>

然后在methods里的change方法:

departChange(val) {

// 改变时获取id通过id查询当前部门的人员

API.getHead(val)

.then(res => {

this.headuserList = res.data;

this.ruleForm.followUser = "" // 置空当前选择的负责人

})

.catch(err => {

console.error(err);

});

},

后来发现这种写法有bug,切换部门时选择负责人不能回显,然后在其他input输入某个字就立即渲染上去

百度之后好像是因为异步渲染的原因

在各个博客上的写法 就是在第二级的select中的change事件里写入这个

this.$forceUpdate()

事实证明这个方法是可行的。

当改变部门后,负责人也清空,选择负责人也可以回显。我接着做表单校验,因为这两个选项必填

然后……..就悲剧了

发现负责人那一栏已经回显了,但就是过不了非空验证

我感觉还是异步渲染的问题。。。。

数据还没渲染上去就进入表单判断了(我猜的,如果说错了请大佬们在评论区指正[笑脸])

后来试了半天,终于找到解决方法了。

rules那边的表单验证正常写,不用改

需要改的是一级select的change事件。

上代码:

departChange(val) {

API.getHead(val)

.then(res => {

this.headuserList = res.data;

// 注意!关键就在这个$set的使用,需要用$set把二级select的选项置空

this.$set(this.ruleForm, "followUser", "");

})

.catch(err => {

console.error(err);

});

},

然后就没问题了,大家可以试一下

如果有大佬的话最好解释一下为什么会出现这种情况,是异步的原因还数据没有被监听到呢?

### 回答1: 在 element-ui ,可以通过 `cascader` 组件实现下拉框的联动。以下是一个示例代码片段,实现了两个下拉框的二级联动: ``` <template> <div> <el-cascader v-model="selectedCities" :options="cities" @change="handleCityChange" clearable ></el-cascader> <el-cascader v-model="selectedDistricts" :options="districts" :show-all-levels="false" clearable ></el-cascader> </div> </template> <script> export default { data() { return { cities: [ { value: 'beijing', label: '北京', children: [ { value: 'dongcheng', label: '东城', }, { value: 'xicheng', label: '西城', }, ], }, { value: 'shanghai', label: '上海', children: [ { value: 'pudong', label: '浦东', }, { value: 'minhang', label: '闵行', }, ], }, ], districts: [], selectedCities: [], selectedDistricts: [], }; }, methods: { handleCityChange(value) { const city = this.cities.find((c) => c.value === value[0]); if (city) { this.districts = city.children; } else { this.districts = []; } this.selectedDistricts = []; }, }, }; </script> ``` 在上述代码,我们使用了两个 `el-cascader` 组件,第一个用于选择城市,第二个用于选择区县。当城市选择发生变化时,我们根据所选城市的子节点来更新区县下拉框的选项,并将其值清空,以避免用户选择错误的区县。 ### 回答2: element是一款基于Vue.js的UI组件库,提供了一系列的常用组件。其elementselect组件支持二级联动功能。下面我将详细解释如何使用element-ui实现select组件的二级联动。 首先,我们需要引入element-uiselect组件和option组件,并在Vue实例注册这两个组件。 在template,我们需要使用el-selectel-option标签来构建下拉框el-select用于显示下拉框el-option用于显示下拉框的选项。 二级联动的实现思路是,根据第一个下拉框的选项,动态生成第二个下拉框的选项。我们可以通过监听第一个下拉框的值的变化,动态更新第二个下拉框的选项。具体实现如下: 1. 在data定义需要的数据,包括第一个下拉框和第二个下拉框的选项数据。 2. 在template,使用el-select标签构建第一个下拉框,并绑定一个v-model,用来获取选的值。 3. 监听第一个下拉框的值的变化,使用watch选项,在回调函数根据选的值动态生成第二个下拉框的选项。 4. 在template,使用el-select标签构建第二个下拉框,并绑定一个v-model,用来获取选的值。 通过以上步骤,我们可以实现element-ui select组件的二级联动。当第一个下拉框的值改变时,第二个下拉框的选项也会相应改变。 需要注意的是,我们可以根据实际需求进行修改和扩展,例如三级联动、四级联动等,只需要在第三个、第四个下拉框添加相应的监听和选项即可。 希望以上回答能帮助到您,如有其他问题,欢迎继续提问。 ### 回答3: element 也是一个流行的前端 UI 框架,它提供了许多实用的组件,其包括 select 下拉框。而在 elementselect 实现二级联动可以通过监听第一个下拉框的变化来动态修改第二个下拉框的选项。 首先,在 Vue 的实例,我们需要定义两个变量,例如 province 和 city,分别用来保存第一级和第二级联动的选项。然后,我们在模板使用 elementselect 组件,并绑定相应的变量。 在第一个下拉框,我们需要设定一个监听函数,例如 handleChangeProvince,当选择了某一个省份时,该函数会被触发。在该函数,我们可以根据选择的省份来更新第二个下拉框的选项,例如将 city 设为该省份所对应的城市列表。 实现这一过程的关键在于如何将第一个下拉框的选项和第二个下拉框的选项进行关联。一种常见的做法是通过一个对象的键值对来表示对应关系,例如一个 provinces 对象保存了省份和城市的对应关系,其键表示省份,值表示对应的城市列表。当选择了某一个省份时,我们可以通过 provinces[province] 来获取该省份所对应的城市列表。 最后,我们将更新后的城市列表赋给第二个下拉框的选项,这样就实现了二级联动。需要注意的是,当再次选择第一个下拉框时,第二个下拉框的选项也需要更新,以保证联动效果。 总之,通过利用 elementselect 组件和 Vue 的监听函数,我们可以轻松实现二级联动的下拉框。这样用户可以根据自己的需求选择对应的选项,提升了用户体验和交互性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值