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