2

我在使用带有过滤器的 ng-options 时遇到问题。

问题是当一个选项被过滤器移除时,选择元素的模型会保留被移除选项的值。

这是一个笨蛋。我有两个过滤器正在处理 ng-options 集。一种是从选项列表中删除重复项,另一种是删除空值。按照这些步骤,您可以看到我所说的问题。

  1. 在“首选电子邮件”下拉列表中,选择最后一个电子邮件选项“jimbob@yahoob.com”。
  2. 删除“Other Email”输入框中的文字。

您现在可以看到,因为“其他电子邮件”为空,它不再是可用选项,并且下拉菜单默认为“请选择首选电子邮件”。但是,选择元素的模型仍然具有分配给它的对象。

相同的问题不同的上下文。

  1. 在“首选电子邮件”下拉列表中,选择“jimbob@yahooz.com”选项。
  2. 现在删除“jimbob@yahooz.com”中的“z”

这样做后,两个输入框中的值(“电子邮件”和“家庭电子邮件”)会重复,第二个(“家庭电子邮件”)会从可用选项中过滤掉。但是,刚刚过滤的对象仍然分配给模型。

编辑:我的解决方案(谁能做得更好?)

这里(plunker)是我能想到的最好的。我是 Angular 的新手,不禁认为有更好的方法可以做到这一点,我认为这个解决方案“不好”但它有效。

本质上,我将对范围(this.contact)的引用以及我正在使用的默认项目的名称('default_email'或'default_phone')传递给过滤器。如果过滤器正在从选项集中删除一个项目,它会检查它是否是默认值,如果是,则将默认值设置为未定义。

我还添加了更多代码,以获得更多关于我正在努力的内容。

4

1 回答 1

0

我知道这很旧,但我花了很长时间试图找出处理这个问题的最佳方法。

原来它已在 Angular 1.4 中修复!尝试用 1.4 替换原始 plunker 中的 Angular 版本,问题就消失了。我通过尝试各种版本发现了这一点,直到我缩小了范围。

于 2016-02-10T20:37:19.373 回答