内容简介:下拉框绑定的 options 改变时,但是 value 值却没有改变,导致检查错误。项目中遇到一个问题,选择司机,是一个下拉列表。这个司机列表是一个动态列表,当你选择的司机不再列表中,可以添加司机,然后再选择;也有可能你选择了司机,还未提交时,这个司机就被删除了,需要给出错误提示。简化一下需要,性别选择,选中了保密后,删除这个选项。
1、问题分析
下拉框绑定的 options 改变时,但是 value 值却没有改变,导致检查错误。
2、代码分析
项目中遇到一个问题,选择司机,是一个下拉列表。这个司机列表是一个动态列表,当你选择的司机不再列表中,可以添加司机,然后再选择;也有可能你选择了司机,还未提交时,这个司机就被删除了,需要给出错误提示。
简化一下需要,性别选择,选中了保密后,删除这个选项。
性别下拉框的 options
sexOptions: Option[] = [ { value: 'man', display: '男' }, { value: 'woman', display: '女' }, { value: 'secret', display: '保密' }, ];
点击删除保密
delete() { this.sexOptions = [ { value: 'man', display: '男' }, { value: 'woman', display: '女' }, ]; }
此时就尴尬了,options 中已经没有保密选项了,但是下拉框绑定的value 却还是 secret。
表单值:{ "sex": "secret" }
现在在删除事件中添加一个重置表单控件的条件,即可解决问题
delete() { this.sexOptions = [ { value: 'man', display: '男' }, { value: 'woman', display: '女' }, ]; this.formGroup.get('sex').reset(); }
表单的 reset() 方法只是让表单的控件置为 null, 很不友好。如果没有选择 保密选择 ,点击删除按钮,值也会被置为空;项目中的选择司机是批量上传,控件有很多,如果重置,会让用户重新输入,不是很好。
如果这个下拉控件是自定义的,就很好解决了,在 ngOnChanges 时检查当前控件的 value 在不在 options 的value 中,如果不再则 value 置为 null,并且控件使用 updateValueAndValidity 方法,重新计算控件的值和校验状态。
// 自定义控件中 ngOnChanges() { // 当 optionList 更新后, value 不再 optionList 中,重置 value 为 null const isReset = this.optionList.some(item => item.value === this.value); if (!isReset) { this.value = null; } } // 删除后使用 updateValueAndValidity delete() { this.sexOptions = [ { value: 'man', display: '男' }, { value: 'woman', display: '女' }, ]; this.formGroup.get('sex').updateValueAndValidity(); }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
区块链革命
[加]唐塔普斯科特(Don Tapscott)、[加]亚力克斯·塔普斯科特(Alex Tapscott) / 中信出版集团股份有限公司 / 2016-9 / 69
(1)国际大腕“数字经济之父”继畅销书《维基经济学》之后再出力作! (2)一本真正全景式描述区块链理论及应用的巨著! (3)苹果共同创始人史蒂夫·沃兹尼亚克、世界经济论坛创始人和论坛主席克劳斯·施瓦布、网景及硅谷安德森·霍洛维茨风险投资公司创始人马克·安德森、麦肯锡董事长兼全球总裁鲍达民、 百事公司首席执行官卢英德、丹·舒尔曼 Paypal公司首席执行官等全球政治界、学术界和商界精英联......一起来看看 《区块链革命》 这本书的介绍吧!