Angularjs:带有过滤器的ng选项,选择元素的模型保留过滤选项的值



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

问题是,当过滤器删除选项时,选择元素的模型将保留已删除选项的值。

这是一个笨蛋。我有两个过滤器在 ng 选项集上工作。一个从选项列表中删除重复项,另一个删除 null。您可以按照以下步骤看到我所说的问题。

  1. 在"首选电子邮件"下拉列表中,选择最后一个电子邮件选项"jimbob@yahoob.com"。
  2. 删除"其他电子邮件"输入框中的文本。

您现在可以看到,由于"其他电子邮件"为空,因此它不再是一个可用的选项,并且下拉列表默认为"请选择首选电子邮件"。但是,选择元素的模型仍然分配了该对象。

同样的问题不同的背景。

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

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

编辑:我的解决方案(任何人都可以做得更好吗?

这里(plunker)是我能想到的最好的。我是角度的新手,忍不住认为有更好的方法可以做到这一点,我认为这个解决方案是"坏的",但它有效。

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

我还添加了更多代码,以获取有关我正在努力的更多上下文。

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

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