“ng-options”上“跟踪”的目的是什么

时间:2014-11-07 18:41:25

标签: angularjs angularjs-ng-options angularjs-track-by

使用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之间会发生这种变化?

1 个答案:

答案 0 :(得分:1)

基于AngularJS的GitHub存储库中的这个问题,似乎这是Angular 1.3中所做更改的意外副作用。 https://github.com/angular/angular.js/issues/9592。根据讨论,听起来他们打算将行为恢复到Angular 1.2中的行为。