2017-03-16 74 views
2

我已经创建了具有在JSON数据中定义的层次结构的链接(父 - 子)选择框。每个选择框对象都指定了它的父级选择框对象,以及一组选择框选项,其中每个选项都包含选项值+父值。选择框对象还包含选定选项对象,该选项对象与可用选择框选项对象之一相同。下面是数据的简化表示:使用ng选项填充选择框多次调用ng-change函数

enter image description here

我创建动态使用在“选择”标签ng-options选择盒,然后我使用自定义过滤器,其中我被父匹配滤波器所检索的选项选项值的选项值与其父对象的“当前选定值”一起使用。基本上使用自定义过滤器从子选项值到所选父值进行多对一映射。

问题是,有了这个结构,我想把ng-change指令放在选择框上,它会调用一个控制器函数来做一些事情。但是这个函数被调用的次数与一个层次结构中的选择框数量相同(在这种情况下为3,如图所示)。这在应用程序中造成严重的不良行为。

Here is the Plunker,我在这里转载了这个问题。我在选择框更改事件上调用一个函数来设置与选择框关联的单选按钮(例如,如果选择了国家/地区选择框中的某个值,则层次结构中下一个选择框的单选按钮,即州,应该被选中)。但由于setDrillDown函数被多次调用,最后一个与层次结构中最后一个选择框关联的单选按钮被选中。

由于这个问题而陷入困境,任何帮助将不胜感激!

回答

1

我用ngModelOptions作为this 所以它只会运行ngChange中提供的函数,当我改变选择。但在初始化阶段消息保持空白。

我用$ timeout作为this,它运行良好。

0

它看起来像预期的那样工作。 ngChange被称为模型价值变化,这就是你的选择发生了什么。

当您更改第一个选择框时,ngChange将被要求CountryStateCity,因为每个这些值都会改变。 如果您在第二个选择State中选择了某些内容,则将调用ngChange来执行StateCity

您必须考虑不同的方法或参数化onChange方法