当链接具有由对象数组构建的ng-options的select元素时,我看到一些奇怪的行为。小提琴here
更改范围属性“filter.general”时,范围属性“filter.option”不会重置,但下拉列表会显示。
数组的强制代码:
$scope.filterData = [
{"name" : "Users", "options" : []},
{"name" : "Data calls", "options" : [{"title": "Collection"}, {"title": "User"}]},
{"name" : "Msg Pub", "options" : [{"title": "Topic"}, {"title": "User"}]},
{"name" : "Msg Sub", "options" : [{"title": "Topic"}, {"title": "User"}]}
];
我想出了一个使用ng-change的hack来擦除“filter.option”以获得所需的行为。小提琴here
有谁知道为什么会这样?这似乎是因为“filter.option”模型没有绑定到“filter.general”模型,因此没有反映后者的任何变化。有没有办法从第一个模型构建第二个模型?任何帮助将不胜感激。
答案 0 :(得分:1)
据我了解,改变'filter.general'没有任何内容可以告诉'filter.option'更新。
希望其他人可以说出原因,我似乎记得有些关于angular.js不喜欢将值更新为null的事情,但是,有时值只是不像你希望的那样更新。对不起,我无法提供有关此事的更多信息。
然而,我有一个解决方案。 这是一个jsfiddle。 http://jsfiddle.net/ADukg/4643/
你需要做两件事。
首先,使用
在您的一般字段上ng-change
告诉该字段更改时的角度。
然后在你的控制器中,有一个'reset'方法,它指向select下拉列表中的第一个选项(空选择)。
return $scope.filter.option = $scope.filter.option[0];
我知道这看起来很奇怪,但我认为这就是你要找的东西。