ng-options的值和标签相同时的错误?

时间:2015-01-15 19:00:47

标签: javascript angularjs angularjs-directive angularjs-ng-options angularjs-watch

如果我在$ scope。$ watch语句中设置ng-options,我会遇到问题。

以下作品: <select ... ng-options="x.val as x.id for x in options"></select>

但这并不是: <select ... ng-options="x.val as x.val for x in options"></select>

Plunker showing my issue -- click 'update options'

似乎如果在选项之前设置了模型的值,并且标签和值是等价的,则模型将不匹配任何可用选项。

这是一个错误,还是我做错了什么?

示例控制器代码:

$scope.myModel = 'Two';
$scope.$watch('loadTrigger', function(newValue, oldValue) {

    if (newValue == oldValue) { return; }

    $scope.options = [{id: 1, text: 'One'}, {id: 2, text: 'Two'}...];
})

示例视图:

<select ng-model="myModel" ng-options="x.text as x.text for x in options">...</select>

当手表触发并且选项更新时,选择将显示空白或默认选项,而不是预期的&#34; Two&#34;。但是,如果标签和值不同(甚至略有不同),那么一切都按预期工作

1 个答案:

答案 0 :(得分:0)

这是Angular联合选择选项与绑定模型的阴影(对我来说)之一。

简而言之,添加track by(而不使用select as)会解决此问题:

<select ng-model="textLabel" 
        ng-options="x.text for x in dynamicOptions track by x.text">
   <option value="">[No Value]</option>
</select>

编辑:前段时间我在Angular的github上发现了这个issue,而没有track by的方法适用于1.2.x Angular - &gt;因此阴暗的部分