我在使用带有过滤器的 ng-options 时遇到问题。
问题是当一个选项被过滤器移除时,选择元素的模型会保留被移除选项的值。
这是一个笨蛋。我有两个过滤器正在处理 ng-options 集。一种是从选项列表中删除重复项,另一种是删除空值。按照这些步骤,您可以看到我所说的问题。
- 在“首选电子邮件”下拉列表中,选择最后一个电子邮件选项“jimbob@yahoob.com”。
- 删除“Other Email”输入框中的文字。
您现在可以看到,因为“其他电子邮件”为空,它不再是可用选项,并且下拉菜单默认为“请选择首选电子邮件”。但是,选择元素的模型仍然具有分配给它的对象。
相同的问题不同的上下文。
- 在“首选电子邮件”下拉列表中,选择“jimbob@yahooz.com”选项。
- 现在删除“jimbob@yahooz.com”中的“z”
这样做后,两个输入框中的值(“电子邮件”和“家庭电子邮件”)会重复,第二个(“家庭电子邮件”)会从可用选项中过滤掉。但是,刚刚过滤的对象仍然分配给模型。
编辑:我的解决方案(谁能做得更好?)
这里(plunker)是我能想到的最好的。我是 Angular 的新手,不禁认为有更好的方法可以做到这一点,我认为这个解决方案“不好”但它有效。
本质上,我将对范围(this.contact)的引用以及我正在使用的默认项目的名称('default_email'或'default_phone')传递给过滤器。如果过滤器正在从选项集中删除一个项目,它会检查它是否是默认值,如果是,则将默认值设置为未定义。
我还添加了更多代码,以获得更多关于我正在努力的内容。