2016-05-12 53 views
1

似乎角色与所选属性相关的行为在每个主要版本中来回切换。所以我只是在寻找某人告诉我这是否可以在1.5.x版本中使用ng-options而不是ng-repeat来实现。使用ng选项为单个/多重选择设置所选属性

我想要做的事: 有角象创建HTML以下(以便它可以通过一个jQuery插件来解释)

<select multiple="multiple"...> 
<option value="abc123" label="Justin" selected="selected">Justin</option> 
</select> 

我已经试过这

许多变化
<select ms-multi-listbox multiple="multiple" class="multi-select" 
id="ym" name="ym" ng-model="groupCtrl.memSelection" 
ng-options="mem as mem.displayName for mem in groupCtrl.selectableMembers track by mem.id"> 

没有运气。

模型是这样的:

groupCtrl.memSelection =["abc123"];//inbound from api as is selectableMembers 

这里是一个普拉克我一直在玩(请尝试更改添加混乱角版本):Plunker

任何想法,欢迎..我主要是为了避免ng-repeat,因为它在更长的列表中有很多开销,但显然慢比不工作要好,所以我会使用它,直到我学会如何使用ng-options来完成此操作。

谢谢!

编辑: 这里是一个NG-再讲达到我想要的结果:

<option ng-repeat="mem in groupCtrl.selectableMembers" value="{{mem.id}}" label="{{mem.displayName}}" ng-selected="groupCtrl.memSelection.indexOf(mem.id)>=0">{{mem.displayName}}</option> 
enter code here 
+0

如果我正确理解你,你想根据选择设置一个属性。你需要一个自定义指令。 – Kyle

+0

是的,我想在选项标签上设置'selected'属性。当你的模型被初始化为列表中的一个值时,Angular会在某些情况下(以及某些版本)为你做这件事。 –

+0

你的链接是错误的。 –

回答

0

使用选择何时和在同一个表达式跟踪由要小心。 AngularJS API ngOptions

您的表达ng-options无法正常工作。在同一表达式中使用select astrack by评估mem.idmem.id.id。将表达式更改为

ng-options="mem as mem.displayName for mem in groupCtrl.selectableMembers track by mem.id" 

而您如何设置所选对象对我来说看起来并不正确。您不能只设置ID,您必须将整个对象设置为选中状态,否则您的表达式评估也会失败。因此,请将您的选择更改为(假设可选数据存储在$scope.model中,因为它在PLUN示例中)。

$scope.memSelection = [$scope.model[0], $scope.model[1]] 

我已经更新了plunk,它适用于单选和多选。

欲了解更多信息,请阅读AngularJS API ngOptions

+0

谢谢Paul,我现在纠正了这个问题。 –

+0

我认为它现在适用,除了1.4版本,但只适用于单选(更新的链接器)。我猜测应用多选的属性是不支持的。 –