使用Angular 1.3时ng-options
中trackexpr(track by)的用途是什么?
在Angular 1.2中,此表达式更改了生成选项上的value=""
表达式,以匹配集合中每个项目上的trackexpr结果。根据这个jsfiddle:http://jsfiddle.net/3fzkym3m/,Angular 1.3不再是这种情况。现在选项只有增量值。
在Angular 1.2中,生成的选项列表为:
<select ng-options="item.text for item in data track by item.value" ng-model="selectedItem" class="ng-pristine ng-valid">
<option value="" class=""> - Select item - </option>
<option value="4">item1</option>
<option value="12">item2</option>
<option value="11">item3</option>
<option value="19">item4</option>
<option value="17">item5</option>
<option value="26">item6</option>
</select>
在Angular 1.3中,生成的选项列表为:
<select ng-options="item.text for item in data track by item.value" ng-model="selectedItem" class="ng-pristine ng-untouched ng-valid">
<option value="" class=""> - Select item - </option>
<option value="0">item1</option>
<option value="1">item2</option>
<option value="2">item3</option>
<option value="3">item4</option>
<option value="4">item5</option>
<option value="5">item6</option>
</select>
Angular是否仍然使用track by来匹配源集合和所选项目之间的对象?这样做还有性能优势吗?为什么Angular 1.2和1.3之间会发生这种变化?
答案 0 :(得分:1)
基于AngularJS的GitHub存储库中的这个问题,似乎这是Angular 1.3中所做更改的意外副作用。 https://github.com/angular/angular.js/issues/9592。根据讨论,听起来他们打算将行为恢复到Angular 1.2中的行为。