【发布时间】:2014-11-25 08:11:00
【问题描述】:
我想知道是否可以在 Select 元素的角度 ng-options 属性中包含其他逻辑。
在一种情况下,我有一组平坦的选项,并且没有与之关联的分组。 在另一个方面,我有多个选项可能具有相同的描述,但是它们的 ID 会有所不同,因为它们都被分组到类别中。根据发送过来的数据,我想将它们显示为分组或未分组。
分组:
<select ng-model="tcCtrl.SelectedItem"
ng-options="item.Id + ' - ' + item.Description
group by item.GroupDescription
for item in ctrl.Context.ItemList }"></select>
未分组:
<select ng-model="tcCtrl.SelectedItem"
ng-options="item.Id + ' - ' + item.Description
for item in ctrl.Context.ItemList }"></select>
按条件分组??
如果可能的话,我想避免选择元素有两个单独的实例,但是我不认为 ngSelectDirective 的解析器真的需要任何条件逻辑。
想好办法来实现这样的事情?
更新: 以下是建议尝试的样子……即使没有任何“逻辑”来构建字符串。
var optionStr = "item.Id for item in ctrl.Context.Items";
...<select ng-options="{{ ctrl.optionStr }}"></select>...
问题是当我尝试绑定它时,绑定似乎不想粘住。如果我采用相同的生成字符串并替换 {{ property }} 那么它工作正常。我什至可以在 chrome 中确认字符串正在标记中呈现。
更新: 我已经证明建议的方法在非常无菌的环境中确实有效。 http://jsfiddle.net/xbws8r5h/
我的环境中一定有某种变体。
【问题讨论】:
-
你为什么要写
ctrl.optionStr。如果应该只是optionStr。您在 ng-controller 中定义控制器对象,例如<div ng-controller="MyCtrl"><select ... ></div>所有绑定都在此控制器的上下文中解析。阅读更多例如here. -
我在我的应用程序中使用 ControllerAs 语法...不直接依赖 $scope...我已经证明这不是问题以及尝试运行 $scope.$apply 并且有还是没有变化
-
更新为包含一个工作版本的小提琴。问题是,我的环境的行为方式不一样......看起来更深入。
-
是的,确实它似乎在你的小提琴上工作。恐怕我无法帮助您为什么它在您的环境中不起作用。至少除非你设法在小提琴上重现问题。
-
当然...完全理解...这将是网关问题...将尝试复制环境...它涉及解决外部 API 调用...这可能是踢球者
标签: angularjs ng-options