2016-05-13 67 views
0

我有一个下拉选择与分组ng选项。用户应该能够动态更改输入字段中组名的命名。 在更改组名值时,除非您进行新的选择,否则select指令不会更新选择ng选项组名称不会更新|动态ng选项组

任何人都有同样的问题?

这里的jsbin:http://jsbin.com/ziyeduzalo/edit?html,js,output

这是我的代码的外观: 的.js

$scope.players = [ 
    {name: 'Gene', team: 'alpha'}, 
    {name: 'George', team: 'beta'}, 

]; 


$scope.change = function() { 
    $scope.players[0].team = 'new-group-name'; 
}; 

的.html

<select ng-options="player.name group by player.team for player in players " ng-model="systemType.tertiaryEquipment"></select> 

UPDATE:这似乎工作老版本的角然后1.4.x.

+0

我不明白为什么,但这个例子工作在jsfiddle检查它[这里](http://jsfiddle.net/66mojr47/2/) –

+0

这是因为Angular.js版本。尝试将其从1.0.x更改为1.4.x,并且不起作用。你的例子中的 – ccostel

+0

在ng-options的结尾放置了'track by player.team'。 [jsfiddle](http://jsfiddle.net/Lvc0u55v/3938/) –

回答

1

在这里,我编辑了你的js bin的副本。基本上我已经告诉angularJS重新编译选择输入,因为它会改变。

这是在一个控制器内完成的,该控制器是一个不良做法,创建一个自定义指令来做这种操作。并使用选择的DOM元素select而不是document.querySelector()

http://jsbin.com/miyecireba/1/edit?html,js,output

+0

谢谢。这确实是一个非常丑陋的做法。希望有更好的方法来解决这个问题。 – ccostel

+0

目前,在垃圾桶里,它是。如果你自己创建一个指令,它不会太糟糕。重新编译一个DOM元素对于用户来说并不重要 –

1

对于其他人可能来到这个问题解决了这方面的问题,其中通过使用轨道提供element变量。

跟踪应该用来标识select中唯一的选项,所以如果这是真正的解决方案,应该有不同的方法。

由于ng-optionsgroup by将产生optgroups我们使用的优势,所以我们可以在group by的物体上使用的track by。 选择组将在select的显示屏上显示唯一。

因此,在这种情况下:

<select ng-options="player.name group by player.team for player in players track by player.team" ng-model="systemType.tertiaryEquipment"></select> 

jsfiddle

注: 用来测试这个角度版本1.4.9。